Noa*_*ley 4 c# sql stored-procedures
提前感谢您的帮助.非常感谢.
经过两个长时间的淘汰Stack Overflow和其他谷歌搜索结果,因为我得到的"程序或功能指定了太多的参数",我找不到有用的帮助.原因是无处不在,我读到我可能要么指定了太多参数,我的参数名称不正确,或者类型不正确.这些都不适合我的情况.这是我的代码:
CREATE PROCEDURE dbo.sproc_UpdateInfo
(
@Name nvarchar(40),
@UserId varchar(50),
@Password varchar(50),
@Address nvarchar(120)
)
AS
Update tbl_Users SET Name=@Name, Password=@Password, Address=@Address WHERE UserId=@UserId
RETURN
Run Code Online (Sandbox Code Playgroud)
这是C#方面的事情:
SqlCommand sqlCmd = new SqlCommand();
sqlCmd.CommandText = "sproc_UpdateInfo";
sqlCmd.CommandType = CommandType.StoredProcedure;
sqlCmd.Parameters.Add("@Name", SqlDbType.NVarChar, 40).Value = name;
sqlCmd.Parameters.Add("@UserId", SqlDbType.VarChar, 50).Value = userID;
sqlCmd.Parameters.Add("@Password", SqlDbType.VarChar, 50).Value = password;
sqlCmd.Parameters.Add("@Address", SqlDbType.NVarChar, 120).Value = address;
SqlConnection sqlConn = new SqlConnection(connectionString);
sqlCmd.Connection = sqlConn;
try
{
sqlCmd.Connection.Open();
int rowaffected = sqlCmd.ExecuteNonQuery(); //Error occurs here
return rowaffected;
}
catch (SqlException se)
{
throw new Exception("SqlException: sqlstr=" + sqlCmd.CommandText, se);
}
finally
{
sqlCmd.Dispose();
sqlConn.Close();
}
Run Code Online (Sandbox Code Playgroud)
map*_*ale 10
更改为此并告诉我错误是否消失...
sqlCmd.Parameters.Add("@Name", SqlDbType.NVarChar, 40).Value = name ?? "";
sqlCmd.Parameters.Add("@UserId", SqlDbType.VarChar, 50).Value = userID ?? "";
sqlCmd.Parameters.Add("@Password", SqlDbType.VarChar, 50).Value = password ?? "";
sqlCmd.Parameters.Add("@Address", SqlDbType.NVarChar, 120).Value = address ?? "";
Run Code Online (Sandbox Code Playgroud)
此外,当您从代码执行查询时,在服务器上运行跟踪:(这是如何:http://databases.about.com/od/sqlserver/ht/trace.htm)
告诉我们执行结果是什么样的(你的sproc实际上是如何执行的)以及它是否被调用.
这里没有魔力.只有少数事情可以发生:
您没有执行您认为的相同版本的sproc或连接到错误的DB或服务器.检查sproc的架构.你确定你正在执行的sproc是dbo.并没有其他版本的参数更少,不是dbo?这让我有几次了.我会在错误的模式下意外修改/创建一个sproc,当我的代码没有指定哪个模式时,我正在登录的用户的默认模式将被执行.真的,你必须要追踪.这是这类事情的基本问题.您需要实际查看SQL正在尝试执行的内容.将该代码复制/粘贴到此处的评论部分.那段代码会给你同样的错误吗?我认为这是一个模式混乱,你有多个版本.听起来很粗鲁,但无论是那个还是你不在你认为的同一个服务器/ db上.发生在我们最好的人身上!:)
另一件事可能正在发生.主数据库中是否有该sproc的版本?如果是这样,请记住它将被执行,而不是您连接到的数据库中的任何sproc.检查主数据库.如果你在那里创建它,它的参数较少,那么这可能是你的问题.