今天是喜悦的一天,终于通过自己的双手把SQL2008与C#直接的数据库连接成功了
在这其间碰到了很多问题,开始时数据库中建表是没有建好,出现了not null的问题,昨天得到了解决。
错误一:
今天就SQL语法错误,select * from Clients这样才对,而开始输成了select * from Rent-a-car,把表名写成了库名,这是个十分低级的错误。
错误二:
还有一个重要错误,就是网上看的菜鸟老鸟都会犯“未将对象引用设置到对象的实例”,在网上找了会,看到是对象NULL,我就通过下面这段代码来查找哪一个对象为空:
代码:if(dtClients == null)
{
MessageBox.Show("dtClients为空");
}
发现时dtClient为NULL,原来是代码: DataTable dtClients = ds1.Tables[“Clients“]出了问题,通过修改 DataTable dtClients = ds1.Tables[0];就成功了,是dtClient实例化了,解决了这个问题。
错误三:
可是到下面又犯了一个很常见的问题,就是textbox中的数据和数据库中的数据比较会出问题。
代码:if (tbUsername.Text.ToString() == dr[1].ToString())这样比较不出来。
然后又在网上查找发现可以采用这样一种方法,代码:dr[1].ToString().Trim().Equals(this.tbUsername.Text.Trim())。
这样就解决了问题,成功连接了数据库,并且与数据进行了交互式操作。
以下附代码:
SqlConnection conn = new SqlConnection("Data Source=*;Initial Catalog=Rent-a-Car;User ID=sa;Password = a;");
conn.Open();
SqlCommand comm1 = new SqlCommand("select * from Clients", conn);
SqlDataAdapter adapter1 = new SqlDataAdapter();
adapter1.SelectCommand=comm1;
if (adapter1 == null)
{
MessageBox.Show("adapter1为空");
}
DataSet ds1 = new DataSet();
adapter1.Fill(ds1);
if (ds1== null)
{
MessageBox.Show("ds1为空");
}
DataTable dtClients = ds1.Tables[0];
if (dtClients == null)
{
MessageBox.Show("dtClients为空");
}
if (rbClient.Checked == true)
{
bool flag2 = false;
foreach (DataRow dr in dtClients.Rows)
{
if (dr[1].ToString().Trim().Equals(this.tbUsername.Text.Trim()))
{
if (dr[2].ToString().Trim().Equals(this.tbPassword.Text.Trim()))
{
groupBox1.Visible = false;
tabControl1.Visible = true;
lLogin_info.Text = "亲爱的客户,您已登录成功";
flag2 = true;
break;
}
}
}
if (flag2 == false)
{
lLogin_info.Text = "抱歉!您的用户名或者密码出错。";
}
}
conn.Close();
}