"SqlParameterCollection 仅接受非空的 SqlParameter 类型对象,不接受 String 对象。" 70

boolresult=false;try{sqlcon.Open();SqlCommandcmd=newSqlCommand("Userlogin",sqlcon);cm... bool result = false;
try
{
sqlcon.Open();
SqlCommand cmd = new SqlCommand("Userlogin", sqlcon);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@username",SqlDbType.VarChar,50).Value=user.UserName);
cmd.Parameters.Add(new SqlParameter("@password",SqlDbType.VarChar,50).Value=user.Password);
object o = cmd.ExecuteScalar();
if (o != null)
{
result = true;
}
else
{
result = false;
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
sqlcon.Close();
}
return result;
热血四驱,谢谢你从别处Copy来的答案,但是对我没用

堆栈追踪:
[Exception: SqlParameterCollection 仅接受非空的 SqlParameter 类型对象,不接受 String 对象。]
MyBll.myuser.UserLogin(SqlConnection sqlcon, UserInfo user) in F:\www\MyFirst\MyBll\myuser.cs:36
Manage_Login.btn_login_Click(Object sender, EventArgs e) in f:\www\MyFirst\Manage\Login.aspx.cs:34
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +96
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +116
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +31
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +32
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +72
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3824
展开
 我来答
百度网友be7ecf1
2008-08-01 · 超过12用户采纳过TA的回答
知道答主
回答量:58
采纳率:0%
帮助的人:38.3万
展开全部
少定义了一个 UserId
就按你前面那样写就行了,加上去
cmd.Parameters.Add("@UserId ",SqlDbType.VarChar,50);

还有一个错误是:
引号的问题:
cmd.Parameters.Add("@UserEmail,SqlDbType.VarChar,50");
应是:
cmd.Parameters.Add("@UserEmail",SqlDbType.VarChar,50);

最后你的数据库是不是就是这几个字段呢?
如果不完全符合,应该写成
UserId=@UserId ,----

我自己有一个,你可以参考一下:

string sql1 = "insert into TA1(xm,lv) values(@xm,@lv)" ;
System.Data.SqlClient.SqlParameter[] sqlparam = new System.Data.SqlClient.SqlParameter[2];

sqlparam[0] = new System.Data.SqlClient.SqlParameter("@xm",System.Data.SqlDbType.VarChar,50);
sqlparam[0].Value = "qimin1029";
sqlparam[1] = new System.Data.SqlClient.SqlParameter("@lv",System.Data.SqlDbType.Decimal);
sqlparam[1].Value = "0.25";
int dd = 0;
string erradssdf = this.ExecSql_EffectRowCount(sql1,sqlparam,System.Data.CommandType.Text,ref dd);

public string ExecSql_EffectRowCount(string sql, System.Data.SqlClient.SqlParameter[] sqlParams, System.Data.CommandType cmdType, ref int effectRowCount)
{
string res = "";
System.Data.SqlClient.SqlConnection cnn = new System.Data.SqlClient.SqlConnection(this.constring);
try
{
cnn.Open();
System.Data.SqlClient.SqlTransaction trans = cnn.BeginTransaction();
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(sql, cnn);
cmd.Transaction = trans;
cmd.CommandType = cmdType;
try
{
if(sqlParams != null)
{
foreach(System.Data.SqlClient.SqlParameter p in sqlParams)
{
cmd.Parameters.Add(p);
}
}
effectRowCount = cmd.ExecuteNonQuery();
trans.Commit();
}
catch(Exception e1)
{
trans.Rollback();//回滚事务
res = e1.Message;
}
}
catch(Exception e)
{
res = e.Message;
}
finally
{
cnn.Close();
cnn.Dispose();
}
return res;
}
冯益斌
2008-08-02 · TA获得超过1019个赞
知道小有建树答主
回答量:869
采纳率:100%
帮助的人:1005万
展开全部
cmd.Parameters.Add(new SqlParameter("@username",SqlDbType.VarChar,50).Value=user.UserName);
cmd.Parameters.Add(new SqlParameter("@password",SqlDbType.VarChar,50).Value=user.Password);
这两句写混了,一般分开来写:
cmd.SqlParameter.Add("@username",SqlDbType.VarChar,50);
cmd.SqlParameter.Add("@password",SqlDbType.VarChar,50);
cmd.Parameters["@username"].Value=user.UserName;
cmd.Parameters["@password"].Value=user.Password;

另外,还要注意的是:
Userlogin这个存储过程的参数是不是@username,@password
user.UserName以及user.Password是不是为null。
你最好在user类中在定义username和password时,就给一个初始值
class user
{
public string username="";
public string password="";
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
深圳贵森科技
2008-08-01 · 超过37用户采纳过TA的回答
知道答主
回答量:169
采纳率:0%
帮助的人:0
展开全部
SqlParameterCollection 对象组,只接受sqlParameter类型的对象,其他类型的全部不认识。所以不要想传其他的参数在里面了。sqlParameter的add方法,就是添加对象的。以内参数都是sqlParameter类型的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
旋天渣观9129
2008-08-01 · TA获得超过1487个赞
知道大有可为答主
回答量:1443
采纳率:0%
帮助的人:1628万
展开全部
cmd.Parameters.Add("@username",SqlDbType.VarChar);
cmd.Parameters[("@username"].Value=user.UserName;
cmd.Parameters.Add("@password",SqlDbType.VarChar);
cmd.Parameters[("@password"].Value=user.Password;

你的语句等价于
new SqlParameter("@username",SqlDbType.VarChar,50).Value=user.UserName;
cmd.Parameters.Add(user.UserName);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
rainee007
2008-08-01 · TA获得超过263个赞
知道小有建树答主
回答量:652
采纳率:0%
帮助的人:456万
展开全部
SqlParameter("@username",SqlDbType.VarChar,50).Value=user.UserName);
第一个参数不需要加"@"
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式