关于.NET执行存储过程的问题MSSQL存储过程代码-----------------------------SQL codeset ANSI_NULLS ONse
关于.NET执行存储过程的问题 MSSQL存储过程代码 -----------------------------
SQL codeset ANSI_NULLS ONset QUOTED_IDENTIFIER ONgoALTER proc [dbo].[InsertUser]@UserName nvarchar(200),@Password nvarchar(200),@Act int outputasbegin if exists(select * from administrator where username=@UserName) begin set @Act=1 insert into administrator (UserName,PassWord) values(@UserName,@Password) end else set @Act=0return @Actend --------------------------
.NET代码
----------------------------------
C# code SqlConnection conn = new SqlConnection(MyConfig.ConnString()); conn.Open(); string Sql = "exec insertuser '" + UserName + "','" + PassWord1 + "',0"; SqlCommand cmd = new SqlCommand(Sql, conn); string Act = cmd.ExecuteScalar().ToString(); if (Act == "1") { MyStr.JsMsg("用户增加成功!"); } else { MyStr.JsMsg("用户增加失败,用户名重复!"); } conn.Close(); ----------------
出现的错误信息:
“/”应用程序中的服务器错误。
未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。
源错误:
行 51: string Sql = "exec insertuser '" + UserName + "','" + PassWord1 + "',0";
行 52: SqlCommand cmd = new SqlCommand(Sql, conn);
行 53: string Act = cmd.ExecuteScalar().ToString();
行 54: if (Act == "1")
行 55: {
源文件: e:\WebSite\hk-company.cn\WebAdmin\AdminUserAdd.aspx.cs 行: 53
堆栈跟踪:
[NullReferenceException: 未将对象引用设置到对象的实例。]
WebAdmin_AdminUserAdd.Page_Load(Object sender, EventArgs e) in e:\WebSite\hk-company.cn\WebAdmin\AdminUserAdd.aspx.cs:53
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +34
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +47
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1061
版本信息: Microsoft .NET Framework 版本:2.0.50727.42; ASP.NET 版本:2.0.50727.42
--------------
请问兄弟们这个是咋会事?
[解决办法] string Act = cmd.ExecuteScalar().ToString();
要对应的是select 返回的数据. 你的存储过程中没有这这句.如果要这么用.存储过程中加一句
select @Act
[解决办法] ExecuteNonQuery 是执行受影响操作
ExecuteScalar 是查询操作
你sql语句是insert操作 所要用ExecuteNonQuery
[解决办法] 探讨 ExecuteNonQuery 是执行受影响操作 ExecuteScalar 是查询操作 你sql语句是insert操作 所要用ExecuteNonQuery [解决办法] 你这样能防注入吗?、
[解决办法] 探讨 你这样能防注入吗?、------解决方案--------------------
return @Act
换成
Select @Act
[解决办法] 这速度。
Select @Act
[解决办法] 现在回答问题拿点分 容易吗???
一帮狼等着呢。。。。哎。。。
[解决办法] ExecuteNonQuery 是执行受影响的行数
ExecuteScalar 是查询操作
探讨 这速度。 Select @Act