ODBC命令参数未绑定

时间:2017-02-03 00:39:05

标签: c# sql-server odbc

我知道有很多关于这方面的问题,但是,我没有看到任何可以解决我问题的问题。

我有这个代码

using (var conn = new OdbcConnection(sConn))
{
    const string cmdIns = "spSound_Insert";
    using (var sqlCmdIns = new OdbcCommand(cmdIns, conn))
    {
        sqlCmdIns.CommandType = CommandType.StoredProcedure;
        sqlCmdIns.Parameters.Add("@uid", OdbcType.NVarChar, 40).Value = "123";
        sqlCmdIns.Parameters.Add("@data", OdbcType.VarBinary, -1).Value = new Byte[128];
        sqlCmdIns.Parameters.Add("@enabled", OdbcType.Bit).Value = true;
        sqlCmdIns.Parameters.Add("@note", OdbcType.NVarChar, 128).Value = "test note";

        conn.Open();
        sqlCmdIns.ExecuteNonQuery();
    }
}

和错误。 。

  

错误[42000] [Microsoft] [ODBC SQL Server驱动程序] [SQL Server]过程   或功能' spSound_Insert'期望参数' @ uid',   那是不供给的。在   System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle,   RetCode retcode)at   System.Data.Odbc.OdbcCommand.ExecuteReaderObject(的CommandBehavior   behavior,String方法,Boolean needReader,Object [] methodArguments,   SQL_API odbcApiMethod)at   System.Data.Odbc.OdbcCommand.ExecuteReaderObject(的CommandBehavior   behavior,String方法,Boolean needReader)at   System.Data.Odbc.OdbcCommand.ExecuteNonQuery()

我尝试过使用AddWithValue,它给了我同样的问题。

这是SQL

use [SoundsDB];
go

create procedure [dbo].spSound_Insert
    @uid nvarchar(40),
    @data varbinary(max),
    @enabled bit = 1,
    @note nvarchar(128)
as
begin
    delete from [dbo].[Sound] where [uid] = @uid;

    insert [dbo].[Sound] ([uid], [data], [enabled], [note], [updated])
    values (@uid, @data, @enabled, @note, GETDATE());

end;

我稍微更改名称,但是当我在sql控制台中运行sp时,似乎按预期工作。

1 个答案:

答案 0 :(得分:0)

所以我搜索了parameterName,我发现了这篇文章https://msdn.microsoft.com/en-us/library/system.data.odbc.odbcparameter.parametername(v=vs.110).aspx

他们有一种不同的方式来调用存储过程,它似乎有用......

using (var conn = new OdbcConnection(sConn))
{
    const string cmdIns = "{ call spSound_Insert(?,?,?,?) }";
    using (var sqlCmdIns = new OdbcCommand(cmdIns, conn))
    {
        sqlCmdIns.CommandType = CommandType.StoredProcedure;
        sqlCmdIns.Parameters.Add("", OdbcType.NVarChar, 40).Value = "123";
        sqlCmdIns.Parameters.Add("", OdbcType.VarBinary, -1).Value = new Byte[128];
        sqlCmdIns.Parameters.Add("", OdbcType.Bit).Value = true;
        sqlCmdIns.Parameters.Add("", OdbcType.NVarChar, 128).Value = "test note";

        conn.Open();
    }
}