我知道有很多关于这方面的问题,但是,我没有看到任何可以解决我问题的问题。
我有这个代码
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时,似乎按预期工作。
答案 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();
}
}