2017-04-27 87 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

將您的commandtext重寫爲_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設置爲文本,在.NET Framework數據提供 ODBC不支持將命名參數的SQL語句或 由一個名爲的OdbcCommand的存儲過程。在這兩種 情況下,使用問號(?)佔位符

此外,當您添加的參數命令參數集合,你應該爲他們提供在由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?