应用存储过程添加数据的问题,请高手帮忙看看~
CS文件如下:
SqlConnection SqlCon = strSQL.GetConnection();
SqlCon.Open();
SqlCommand cmd = new SqlCommand( "reg_user ", SqlCon);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter[] prams ={
new SqlParameter( "@uid ",SqlDbType.NVarChar,50),
new SqlParameter( "@pwd ",SqlDbType.NVarChar,50),
new SqlParameter( "@mcode ",SqlDbType.NVarChar,50),
new SqlParameter( "@cname ",SqlDbType.NVarChar,100),
new SqlParameter( "@addr ",SqlDbType.NVarChar,100),
new SqlParameter( "@lxr ",SqlDbType.NVarChar,50),
new SqlParameter( "@zip ",SqlDbType.NVarChar,20),
new SqlParameter( "@tel ",SqlDbType.NVarChar,50),
new SqlParameter( "@mobile_no ",SqlDbType.NVarChar,20),
new SqlParameter( "@fax ",SqlDbType.NVarChar,20),
new SqlParameter( "@email ",SqlDbType.NVarChar,20),
new SqlParameter( "@curl ",SqlDbType.NVarChar,50),
new SqlParameter( "@qq ",SqlDbType.NVarChar,20),
new SqlParameter( "@loginIP ",SqlDbType.NVarChar,20),
new SqlParameter( "@loginsys ",SqlDbType.NVarChar,20),
new SqlParameter( "@Browser ",SqlDbType.NVarChar,20)
};
prams[0].Value=uid;
prams[1].Value=pwd;
prams[2].Value=mcode;
prams[3].Value=cname;
prams[4].Value=addr;
prams[5].Value=lxr;
prams[6].Value=zip;
prams[7].Value=tel;
prams[8].Value=mobile_no;
prams[9].Value=fax;
prams[10].Value=email;
prams[11].Value=curl;
prams[12].Value=qq;
prams[13].Value=loginIP;
prams[14].Value=loginsys;
prams[15].Value = Browser;
//添加参数
foreach (SqlParameter parameter in prams)
{
cmd.Parameters.Add(parameter);
}
cmd.ExecuteNonQuery();
SqlCon.Close();
存储过程如下:
ALTER PROCEDURE [dbo].[reg_user]
(--Coding By Flyso
--会员表
@uid nvarchar(50), --用户名
@pwd nvarchar(50), --密码
@mcode nvarchar(50), --明码
@cname nvarchar(100), --公司名称
@addr nvarchar(100), --地址
@lxr nvarchar(50), --联系人
@zip nvarchar(20), --邮编
@tel nvarchar(50), --电话
@mobile_no nvarchar(20), --手机
@fax nvarchar(20), --传真
@email nvarchar(20), --邮箱
@curl nvarchar(50), --网址
@qq nvarchar(20), --QQ
@loginIP nvarchar(20), --登录IP
@loginsys nvarchar(20), --操作系统
@Browser nvarchar(20) --浏览器
)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @strSQL nvarchar(1000)
SET @strSQL= 'INSERT INTO user '
SET @strSQL=@strSQL+ '(uid,pwd,mcode,cname,addr,lxr,zip,tel,mobile_no,fax,email,curl,qq,loginIP,loginsys,Browser)VALUES '
SET @strSQL=@strSQL+ '(@uid,@pwd,@mcode,@cname,@addr,@lxr,@zip,@tel,@mobile_no,@fax,@email,@curl,@qq,@loginIP,@loginsys,@Browser) '
EXEC(@strSQL)
print(@strSQL)
END
----------------------------------------
错误如下:
必须声明标量变量 "@uid "。
这是什么问题,uid变量是有值的,是不是变量传递到存储过程中出现了问题...
[解决办法]
你的存储过程在查询分析器执行的了吗?
'(@uid,@pwd,@mcode,@cname,@addr,@lxr,@zip,@tel,@mobile_no,@fax,@email,@curl,@qq,@loginIP,@loginsys,@Browser) '
用动态SQL这就要
'( ' + @uid + ', ' +...........
[解决办法]
DECLARE @strSQL nvarchar(1000)
SET @strSQL= 'INSERT INTO user '
SET @strSQL=@strSQL+ '(uid,pwd,mcode,cname,addr,lxr,zip,tel,mobile_no,fax,email,curl,qq,loginIP,loginsys,Browser)VALUES '
SET @strSQL=@strSQL+ '(@uid,@pwd,@mcode,@cname,@addr,@lxr,@zip,@tel,@mobile_no,@fax,@email,@curl,@qq,@loginIP,@loginsys,@Browser) '
EXEC(@strSQL)
print(@strSQL)
END
============================
没必要这么拼
直接 insert table() values() 就可以
SQL 语句换行没关系!
[解决办法]
用这种方法吧
SqlCommand com = new SqlCommand( "d_fabric_insert ", Con);
com.CommandType = CommandType.StoredProcedure;
com.Parameters.Add( "@code ", SqlDbType.Char ,2).Value =Convert.ToString(codesl);
com.Parameters.Add( "@order_no ", SqlDbType.Char,9).Value=order;
com.ExecuteNonQuery();