已解决

我在用SQLHelper时出了问题已解决

学员:coon788提问时间:2008-10-20 17:14:59

老师在第二讲中给的Exists方法中有这个判断
if (stype == "text")
{
sql = "select U_id from Users where U_User='" + name + "' and U_PWD='" + pwd + "'";
cmd = new SqlCommand(sql, conn);
conn.Open();
i = Convert.ToInt32(cmd.ExecuteScalar());
}
return i;
而后在SQLHelper的方法把if判断给省了,为什么我省了if判断后就无法返回cmd.ExecuteScalar()方法
试了很多次 才又添了stype参数 就行了
可是我想知道为什么,谢谢老师!!

采纳为答案

回答人:polarstar (.NET学习顾问)回答时间:2008-10-21 20:50:20

根据你的叙述,跟老师的代码没有关系ExecuteScalar函数中加“if (stype == "text")”完全没有必要,既然传进来的sql参数是SQL语句就不必要判断了。
根据出错提示,最大可能是连接串不对或数据库不允许远程连接,你检查一下conn的连接串是否正确,可以打开VS的“视图(VIEW)->服务器资源管理器(Server Explorer)”,这这里连接数据库,连接成功后把属性里面的连接串拷贝给conn.ConnnectionString

学员对该答案的评价 是这样的 谢谢

其他回答

回答人:amandag(高歌 .NET学习顾问)回答时间:2008-10-20 22:45:14
请帖一下上下文相关代码
回答人:polarstar (.NET学习顾问)回答时间:2008-10-21 00:08:05
楼主是不是说SQLHelper的ExecuteScalar函数啊?这个函数没有if判断也不需要啊,只要执行了Convert.ToInt32(cmd.ExecuteScalar());肯定能返回的。
建议楼主:
1.把问题描述详细一点;
2.在有疑问的地方前面设置一个断点,执行到断点后按F10单步执行看每行代码执行情况。
回答人:coon788回答时间:2008-10-21 09:29:34
我也试过啦用Convert.ToInt32(cmd.ExecuteScalar()); 可是跟它没关系
public static object ExecuteScalar(string sql, string stype)
{
int i = 0;
InitConn();
if (stype == "text")
{
SqlCommand cmd = new SqlCommand(sql, conn);
conn.Open();
i=Convert.ToInt32(cmd.ExecuteScalar());
}
return i;
}
我把ExecuteScalar()改了一下才能用
回答人:coon788回答时间:2008-10-21 10:47:46
问题很多啊,麻烦老师帮我解决解决啊!!
上面的是SQLHelp出了问题 我试图用田老师给的SQLHelper 但是在抛出异常这就出了问题,但没有错误列表,运行后说{throw EX;}不能远程登录
try
{
if (conn.State == ConnectionState.Closed)
conn.Open();
SqlCommand cmd = new SqlCommand(que, conn);
return cmd;
}
catch (SqlException EX)
{
throw EX;
}
cmd.ExecuteScalar()也是同样的情况,后来加了那个if判断,这个问题没有了,但是运行后返回的总是0.可我的数据库里不是空的。开始田老师说返回的数是随机的可能跟他的不一样,后来我发现代码做来做去,做到Add()时,自增返回的还是0,我才明白,原来我的sql语句从来就没执行过
回答人:田洪川回答时间:2008-10-21 10:49:48
建议断点看下你的 SQL(之所以要断点看是因为有时候不小心在代码中修改了SQL语句)
用逐行看这个方法中的变量值。
回答人:coon788回答时间:2008-10-21 10:53:38
那也不能我每个SQL都不运行啊,田老师,那个抛出异常不用行吗?
我想用您的SQLHelper,可是它经常提示不能远程登录,您帮我解决一下好吗?谢谢老师
回答人:课程助教(zydj_2006)回答时间:2008-10-21 11:37:47
coon788学员,请把您的全部相关代码打包发到客服支持邮箱:support@itcast.net