2017-04-27 1 views
1

以下はスカラー変数「@connection」エラーを宣言する必要があります

を取得していたためにコードが

エラースカラー変数@connectionを宣言する必要があります。私はどこが間違っているのか分かりません。してください

protected void LinkButton1_Click(object sender, EventArgs e) 
{ 
    string connection = Drpconn.SelectedItem.Text; 
    using (OdbcConnection con = new OdbcConnection("DSN=Sqltesting;UID=user1;[email protected];Integrated Security=no;")) 
    { 

     using (OdbcCommand cmd = new OdbcCommand("INSERT INTO TblConfigure(Connection,Server,DbName,UserID,Password,Connection_Name,Port,Service_ID) VALUES (@Connection, @Server , @DbName,@UserID,@Password,@ConnectionName,@Port,@ServiceID)", con)) 
     { 
      con.Open(); 

      cmd.Parameters.AddWithValue("@Connection", connection); 
      cmd.Parameters.AddWithValue("@Server", TxtServer.Text); 
      cmd.Parameters.AddWithValue("@DbName", DrpDbName.SelectedItem.Text); 
      cmd.Parameters.AddWithValue("@UserID", TxtUsr.Text); 
      cmd.Parameters.AddWithValue("@Password", TxtPass.Text); 
      cmd.Parameters.AddWithValue("@ConnectionName", Txtconnname.Text); 
      cmd.Parameters.AddWithValue("@Port", TxtPort.Text); 
      cmd.Parameters.AddWithValue("@ServiceID", TxtService.Text); 

      cmd.ExecuteNonQuery(); 
     } 
    } // closes the connection 
    Response.Redirect("LoginPL.aspx"); 
} 
+1

コマンドラインを_INSERT INTO(.....、)VALUES(?、?、?、?、?)に書き直す_ Odbcは名前付きパラメータをサポートしていません – Steve

+0

ここでドキュメントを読む:https ://msdn.microsoft.com/en-us/library/system.data.odbc.odbcparameter.aspx、プレースホルダ "?"名前パラメータを使用する代わりに –

+0

問題の原因ではありませんが、[AddWithValueの使用を中止する](http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already) –

答えて

2

ODBC parametersのガイドラインに従ってコマンドテキストを書き直す必要があります。このプロバイダでは、パラメータに埋め込まれたNAMEDプレースホルダをコマンドテキストに指定することはできません。
このテキストには、パラメータの疑問符だけを入力します。 CommandTypeをが ODBCがたOdbcCommandによって呼び出されるストアドプロシージャにSQL文または に名前付きパラメータを渡すサポートしていないため、.NET FrameworkデータプロバイダーをTextに設定されている

。コマンドのパラメータコレクションにパラメータを追加するときに、これらの 例のいずれかで、あなたはINSERTフィールドが期待する正確な順序でそれらを提供する必要があり疑問符(?)プレースホルダも

を使用しています。 (しかし、これはあなたの現在のコードではすでに正しいです)

string cmdText = @"INTO TblConfigure 
      (Connection,Server,DbName,UserID, 
      Password,Connection_Name,Port,Service_ID) 
      VALUES (?,?,?,?,?,?,?,?)"; 
    using (OdbcCommand cmd = new OdbcCommand(cmdText, con)) 
    { 
     con.Open(); 
     cmd.Parameters.AddWithValue("@Connection", connection); 
     ..... 

最後のメモ。 AddWithValueに注意してください。それは便利なショートカットですが、特定の状況ではあなたに噛み付きます。 Can we stop using AddWithValueAlready?