连接sql server数据库用到的命名空间是using System.Data.SqlClient;
数据库连接代码:可以在大类之下声明 public SqlConnection myConnection; //sql连接对象
public SqlCommand myCmd; //用于存储sql语句的对象
另一种读取对象是dataset public SqlDataReader myreader; //用于读取数据库的对象
SqlConnection myConnection;的用法是在其构造函数内指明连接字符串
myConnection = new SqlConnection("连接字符串");
可以用配置文件来保存该链接文件,这样即便更换SQL SERVER数据库的服务器,只要在解决方案里改变配置文件app.config里的连接字符串就可以了。具体的操作是:在VS中双击属性,在出现的对话框中选"设置",在里面填好"名称","类型","值"。要记住你添的名称(假设为connectionstring)。再在代码中声明一个字符串变量str,给他赋值为:Properties.Settings.Default.connectionstring;然后 myConnection = new SqlConnection("str"); myConnection.Open(); 就可以连接数据库了。
SqlCommand myCmd; 的用法是在其构造函数内写出sql语句和连接字符串对象
myCmd = new SqlCommand("sql语句",myConnection);
这只是存储sql语句,还没有把它交给数据库处理,要交给数据库处理可以用 myCmd.ExecuteNonQuery();该方法是执行myCmd内的sql语句,并返回int型的受影响的行数, 更多用的是 SqlDataReader myreader读取数据库的对象.
SqlDataReader myreader; 只能通过SqlCommand myCmd的ExecuteReader()创建实例 用法是:
myreader = myCmd.ExecuteReader(); 创建 SqlDataReader实例的同时,向数据库提交了sql语句
用SELECT语句查询数据后可以用myreader.Read()来判断数据库中有没有要查询的数据,该方法返回的是一个布尔类型,如果myreader.Read()返回true说明数据库中有要查询的数据,反之,说明数据库中没有要查询的数据。如果查询的是"学号"(0700120343) myreader["姓名"].ToString(); 意思是返回数据库中学号是0700120343的同学的姓名,并将其转换为字符串形式,就可以显示在文本控件中了。
其中myCmd = new SqlCommand("sql语句",myConnection);中的sql语句在一些条件为动态的时候因为有单引号,很不好写,可以用以下方法:
例如:
myCmd = new SqlCommand("SELECT * FROM xueshengxinxi WHERE [专业]=@zhuanye", myConnection);
//利用sqlcommmand对象的.Parameters
myCmd.Parameters.AddWithValue("@zhuanye", tbzhuanyechaxun.Text.Trim()); //成员完成查询字符串的添加
Parameters.AddWithValue( ,)的第一个参数是sql语句中的动态条件,第二个参数是一个控件以字符串形式给这个动态便条件赋值。
DateTime.Now.ToString("北京时间 HH时:mm分:ss秒");
下面的例子分别用了加单引号法和Parameters.AddWithValue的方法, myreader = myCmd.ExecuteReader()方法和 myCmd.ExecuteNonQuery();方法,另外每生成一个myreader对象,使用完就要关闭 myreader.Close();,数据库连接也要关闭。
myCmd = new SqlCommand("SELECT * FROM xueshengxinxi WHERE 学号=" + "'" + tbxuhao.Text.Trim() + "'", myConnection);
myreader = myCmd.ExecuteReader();
if (myreader.Read())
{
MessageBox.Show("数据库已有该学生的记录");
myreader.Close();
}
else
{
myreader.Close();
myCmd = new SqlCommand("INSERT INTO xueshengxinxi VALUES (@xh,@xm,@xx,@xy,@zy,NULL)", myConnection);
myCmd.Parameters.AddWithValue("@xh", tbxuhao.Text.Trim());
myCmd.Parameters.AddWithValue("@xm", tbxingming.Text.Trim());
myCmd.Parameters.AddWithValue("@xx", tbxuexiao.Text.Trim());
myCmd.Parameters.AddWithValue("@xy", tbxueyuan.Text.Trim());
myCmd.Parameters.AddWithValue("@zy", tbzhuanye.Text.Trim());
myCmd.ExecuteNonQuery();
}
关于控件errorProvider的用法
比如一个事件被判断为出错,就可以使用errorProvider1.SetError( ,);方法,第一个参数是输入红圈消息出现在哪个控件的右边,第二个参数是输入消息信息的字符串。errorProvider1.Clear();方法是适时的清除错误提示。
如: myCmd = new SqlCommand("SELECT * FROM xueshengxinxi WHERE [专业] =@zhuanye",myConnection); //利用sqlcommmand对象的.Parameters
myCmd.Parameters.AddWithValue("@zhuanye", tbzhuanyechaxun.Text.Trim()); //成员完成查询字符串的添加
myreader = myCmd.ExecuteReader();
this.errorProvider1.Clear(); //注意errorProvider.Clear();放的位置
if (myreader.Read())
{
tbxuhao.Text = myreader["学号"].ToString();
tbxingming.Text = myreader["姓名"].ToString();
tbxuexiao.Text = myreader["学校"].ToString();
tbxueyuan.Text = myreader["学院"].ToString();
tbzhuanye.Text = myreader["专业"].ToString();
myreader.Close();
}
else
{
myreader.Close(); //使用errorProvider.SetError()方法
this.errorProvider1.SetError(tbzhuanyechaxun, "并无此专业");
}
单击主窗口的一个按钮打开一个副窗口的方法
先添加一个窗口,在VS里面"项目"-"添加新项"-"WinForm"-"Windows 窗体" 添加后可以设计此窗体了,然后在主窗口的按钮事件里创建一个该窗口的实例,再用模态(ShowDialog())或非模态(Show())的方式显示出来。例如创建一个Form一个的实例并且显示出来。
Form3 frm3 = new Form3();
frm3.Show();