2016-11-21 75 views
-1

當我在下面運行我的代碼時,發生以下錯誤。我正在運行用戶註冊頁面,其中包含名字,姓氏,用戶名,密碼等詳細信息。 「ID」是我的主要關鍵。錯誤:「在System.Data.dll中發生類型'System.ArgumentException'的異常,但未在用戶代碼中處理 附加信息:初始化字符串的格式不符合從索引0開始的規範。」在用戶代碼中未處理SQL異常

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Configuration; 
using System.Data.SqlClient; 
using System.Data; 


namespace WebApplication_Assignment 
{ 
    public partial class User_Registration_WebForm : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 

     protected void Button_SubmitUserReg_Click(object sender, EventArgs e) 
     { 
      //Response.Write("Your registration is successful"); 

      string sql = "SELECT * from User_Table where User_Name = @username"; 

      using (SqlConnection connection = new SqlConnection("ConnectionString")) 
      using (SqlCommand command = new SqlCommand(sql, connection)) 
{ 
    var userParam = new SqlParameter("username", SqlDbType.VarChar); 
    userParam.Value = TextBox_UserName.Text; 

    command.Parameters.Add(userParam); 

    var results = command.ExecuteReader(); 
} 
+0

爲什麼你的錯誤日誌代碼被註釋掉了?讓我們看看實際的異常消息,請...另外:不要連接字符串:使用參數 –

+0

我有錯誤記錄代碼的錯誤,所以刪除它與代碼的其餘部分繼續前進,這些錯誤是:錯誤CS1519:類,結構或接口成員聲明中的無效標記'catch',錯誤CS1002:;預期的錯誤CS1519:無效的標記'('在類,結構或接口成員聲明中,錯誤CS0116:名稱空間不能直接包含成員,如字段或方法 – sullkid16

+0

這裏是完整的錯誤,當我註釋掉錯誤日誌代碼時,在System.Data.dll中發生類型'System.Data.SqlClient.SqlException'類型的異常,但未在用戶代碼中處理 附加信息:「Sullivan」附近的語法錯誤 字符串'後未使用引號') 」。 – sullkid16

回答

0

因爲您沒有使用參數,所以您的姓氏(姓氏)幾乎肯定是「O'Sullivan」請參閱單引號;它導致TSQL語句不正確地形成。

如果連接字符串,會遇到類似問題,並打開自己的SQL注入攻擊。始終使用參數。

這裏有一個簡單的例子:

string sql = "SELECT * from employee where username = @username"; 

using (SqlConnection connection = new SqlConnection("connection string") 
using (SqlCommand command = new SqlCommand(sql, connection)) 
{ 
    var userParam = new SqlParameter("username", SqlDbType.VarChar); 
    userParam.Value = txtUsername.Text; 

    command.Parameters.Add(userParam); 

    var results = command.ExecuteReader(); 
} 

有對SO SQL注入攻擊多次提到。這裏有一個例子:

Why do we always prefer using parameters in SQL statements?

+0

是的,我使用的是這個姓氏,但刪除它,並使用「奧沙利文」,仍然是同樣的錯誤。 – sullkid16

+0

我將如何將它們更改爲參數? – sullkid16

+0

SqlDbType.VarChar,該代碼的SqlDBType部分有下劃線說明它不存在於當前上下文中? – sullkid16

相關問題