【问题标题】:Must declare the scalar variable '@connection' error必须声明标量变量“@connection”错误
【发布时间】:2017-09-24 20:24:26
【问题描述】:

下面是我得到的代码

必须声明标量变量@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");
}

【问题讨论】:

  • 将您的命令文本重写为 INSERT INTO (.....) VALUES(?,?,?,?,?,?,?,?) Odbc 不会支持命名参数
  • 在这里阅读文档:msdn.microsoft.com/en-us/library/…,它应该使用占位符“?”而不是使用名称参数。
  • 不是你的问题的原因,但你应该stop using AddWithValue

标签: c# asp.net odbc scalar


【解决方案1】:

您需要重写命令文本以遵循ODBC parameters 的准则。使用此提供程序,您无法为参数提供带有嵌入式 NAMED 占位符的命令文本。
您只需为该文本提供参数的问号。

当 CommandType 设置为 Text 时,.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?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多