以下是我要获取的代码
必须声明标量变量@connection
错误。我不知道自己哪里出错了。请指导
protected void LinkButton1_Click(object sender, EventArgs e)
{
string connection = Drpconn.SelectedItem.Text;
using (OdbcConnection con = new OdbcConnection("DSN=Sqltesting;UID=user1;PWD=test@123;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");
}
答案 0 :(得分:2)
您需要重写命令文本以遵循ODBC parameters的准则。使用此提供程序,您无法为参数提供带嵌入式NAMED占位符的命令文本 您只为参数的问号提供此文本。
当CommandType设置为Text时,.NET Framework数据提供程序为 ODBC不支持将命名参数传递给SQL语句或 到OdbcCommand调用的存储过程。在其中任何一个 使用问号(?)占位符
此外,当您将参数添加到命令Parameters集合时,您应该按照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?