2016-11-21 16 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

なぜエラーログコードがコメントアウトされていますか?実際の例外msgを見てみましょう...また、文字列を連結しないでください:パラメータを使用してください –

+0

私はエラーログコードにエラーがありますので、残りのコードと一緒に移動します。 CS1519:クラス、構造体、またはインターフェイスメンバの宣言でトークン 'catch'が無効です。エラーCS1002:; CS1519:クラス、構造体、またはインターフェイスメンバ宣言のトークンが無効です(CS0116:名前空間にフィールドやメソッドなどのメンバーが直接含まれていない可能性があります) – sullkid16

+0

エラーログコードをコメントアウトすると、 System.Data.dllで 'System.Data.SqlClient.SqlException'型の例外が発生しましたが、ユーザーコードで処理されませんでした。 追加情報: 'Sullivan'付近の構文が正しくありません。 文字列の後に閉じられていない引用符 ') ' – sullkid16

答えて

0

あなたはパラメータを使用していないので、あなたはほぼ確実「O'Sullivan」という単一引用符を参照してくださいある姓(姓)を持っています。 TSQLステートメントが不適切に形成されています。

文字列を連結すると、このような問題が発生し、SQLインジェクション攻撃が発生します。常にパラメーターを使用してください。 SO上の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(); 
} 

:ここ

は簡単な例です。ここに1つの例があります:

Why do we always prefer using parameters in SQL statements?

+0

はい私はその姓を使用していましたが、削除して "osullivan"を使用しましたが、それと同じエラーです。 – sullkid16

+0

どうすればパラメータに変更できますか? – sullkid16

+0

SqlDbType.VarChar、このコードのSqlDBType部分には、現在のコンテキストに存在しないことが説明されていますか? – sullkid16

関連する問題