System.Data.SqlClient.SqlException: 将数据类型 varchar 转换为 numeric 时出错。

edisonlzk 2007-10-29 08:15:15
public class DataBase
{
public DataBase()
{
//
// TODO: 在此处添加构造函数逻辑
//
}

//string strCon = "Data Source=localhost;Integrated Security=SSPI;Initial Catalog=TestOnline";
private SqlConnection SqlCon = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=TestOnline");
private SqlCommand SqlCmd;
// private SqlDataAdapter da;
// private DataSet ds;

public int GetUser(string ComStr)
{
SqlCon.Open();
SqlCmd = new SqlCommand(ComStr, SqlCon);
int i;
i = Convert.ToInt32(SqlCmd.ExecuteScalar());
return i;
}
}


protected void Button1_Click(object sender, EventArgs e)
{
DataBase db = new DataBase();

if (this.TextBox1.Text.Trim() == "" || this.TextBox2.Text.Trim() == "" || this.DropDownList1.SelectedValue == "")
{
Response.Write("<script>alert(\"账号,密码,用户类型不能为空\");</script>");
}
else
{
switch (DropDownList1.SelectedValue)
{
case "学生":
string SelCmd = "SELECT COUNT(*) FROM Student WHERE Name=" + this.TextBox1.Text + "and Pwd='" + this.TextBox2.Text + "'";
// int tmp = db.GetUser(SelCmd);
// Response.Write(tmp.GetType());
if (db.GetUser(SelCmd) != 0) //System.Data.SqlClient.SqlException: 将数据类型 varchar 转换为 numeric 时出错。
{
Session["StuNo"] = this.TextBox1.Text;
Response.Write("<script>alert(\"登陆成功\");</script>");
}
else
{
Response.Write("<script>alert(\"账号或密码错误\");<script>");
}
break;
default:
// Session["StuNo"] = this.TextBox1.Text;
// Response.Write(Session.ToString());
break;
}
}
}


请高手帮我看看是哪里出了问题啊.我弄了半天都没有找到原因
...全文
696 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
boblaw 2007-10-29
  • 打赏
  • 举报
回复
1. 之前出错,原因是and前面少了个空格.
2. 对于char类型,如果值是数字,加或不加引号是可以查询出来的.但是如果里面有非数字,必须加单引号!
lishijie910123 2007-10-29
  • 打赏
  • 举报
回复
可能sql语句就有问题
edisonlzk 2007-10-29
  • 打赏
  • 举报
回复
name是CHAR型的
PWD是NVARCHAR型的
如果我加上单引号以后,程序没有反应
但是我不加单引号在数据库里面又能查出结果
select count(*) from student where stuno=6310610102 and pwd='edison'
这样查询有结果,影响一条纪录
boblaw 2007-10-29
  • 打赏
  • 举报
回复
请换下面这行代码试一下

//Name是什么类型?应该是文本型吧?所以加了两个"'"号,另外,"and"前面应该加一个空格
string SelCmd = "SELECT COUNT(*) FROM Student WHERE Name='" + this.TextBox1.Text + "' and Pwd='" + this.TextBox2.Text + "'";

如果还有错的话,LZ应该检查一下数据库中name和Pwd字段的类型是否设置错误,比如设成了numeric类型.

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧