
先从数据库中取出结果集后进行处理数据后再UpData更新到数据库(共三步)
如果只想读取和显示数据 则只需使用数据读取器 SqlDataReader即可, 但要处理数据然后更新数据库(增加,更改),就需要用数据集DataSet和
数据适配器SqlDataAdaper
SqlDataAdapter在下面有用法:
其中:读取数据时用SqlDataReader是固定的 但是处理数据更新时(增加,更改)为两种情况,(一)直接拼SQL语句 适用于简单的表,
(二)用参数的 用到SqlDataAdaper 适用于复杂的表
建议:简单的表可以用(一) 但是在实际项目中复杂的表最好用(二)
因为带参数的 要插入或更改的数据结构已被参数欲留位置了,不用对其进行类型转换,当在后面定义了参数后会自动转换,比较简单
其中删除一条记录不用带参数的 直接用(一)拼SQL语句 cmd.ExecuteNonQuery()即可
只有insert 和 update 增加和更改用带参数的 如果全部删除也的用带参数的
补充(必看):定义个全局变量 Private SqlConnection m_con =null;
然后在方法内部 m_con =new 出来
断开式连接体现在:写一个 连接数据库的方法 返回bool值 以后再就不用写连服务器,库名,用户名,密码的字符串了
以后再连接数据库就直接用m_con.Open();即可打开
public bool db_check()//当然复杂时就用传参数形式
{
bool flag=false;
string ConnectionString ="data source =" + dbServerName.Text +";initial catalog=" + dbName.Text + ";
user id=" +dbUsername.Text + ";password=" +this.dbPassword.Text + ";";
try
{
m_con = new SqlConnection(ConnectionString);
m_con.Open();
MessageBox.Show("数据库连接成功!");
flag=true;
}
catch
{
MessageBox.Show("数据库连接不成功!");
flag=false;
}
return flag;
}
(一)、c#连接SQL数据库代码:==只是一个简单的例子
public DataTable Read()
{
DataTable dt =new DataTable();//新建表
dt.Columns.Add("col_1");//新建表中的列
dt.Columns.Add("col_2");
string ConnectionString ="data source=localhost;initial catalog=pubs;user id=sa;password=sa";
SqlConnection Conn= new SqlConnection(ConnectionString);
if (Conn.State==ConnectionState.Open)
{
Conn.Close();
}
Conn.ConnectionString=ConnectionString;
Conn.Open();
try
{
SqlCommand cmd=new SqlCommand("Select * from tab_name
而已
{
DataRow dr =dt.NewRow();//每循环一次新建一行
dr[0] =myReader.GetInt32(0).ToString();表示接收第一个字段(string型)
dr[1] =myReader.GetInt32(1).ToString();
dt.Rows.Add(dr);//每次循环把dr加进去
}
myReader.Close();
Conn.Close();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
return dt;
}
(二)、 关于Command对象 (SqlCommand有两种方法各有优点)
//只用于查询 其实可以用于多记录查询 两个SQL语句连起来 用 myReader.NextResult() 即可
(A)SqlCommand cmd =new SqlCommand(SqlText,con);//这是读数据 此要和 SqlDataReader连用 再和ExecuteReader或ExecuteScalar连用.
new 这个是用来读数据的 就用DataReader 来接
这句等同于下面的三句
(B)
//这个不用于查询 用于执行T_SQL增删改等等
SqlCommand cmd =con.CreateCommand();
cmd.CommandTest="Create table tab_name (name varchar(20),password varchar(20))";
cmd.ExecuteNonQuery();
***说明 :关于SqlCommand用法有ExecuteNonQuery、ExecuteReader,ExecuteScalar三种其中ExecuteReader(所有查询),ExecuteScalar(首行首列查询)
ExecuteNonQuery为执行T-SQL语句但是不建议查询
如果一个类有多个SQL语句要执行用(B)ExecuteNonQuery三句 但是ExecuteNonQuery自动执行最靠近它的那句CommandTest(每次只执行一句)
如果一个类中只有一个SQL语句要执行用(A)即可
***说明: (A)A与ExecuteReader,ExecuteScalar相匹配
(B)B三句的与ExecuteNonQuery相匹配
(三)、关于数据读取器 SqlDataReader 对象 (其中SqlDataReader是和SqlCommand cmd =new SqlCommand(SqlText,con)它连用的)
如果只想读取和显示数据 则只需使用数据读取器 SqlDataReader即可 但要处理数据然后更新数据库,就需要用数据集DataSet和适配器 SqlDataAdaper
SqlDataReader reader =new SqlDataReader();
(A)实例:
SqlCommand cmd=new SqlCommand("Select * from tab_name
加列或者删除现有的列)
实例:
DataTable schema =reader.GetSchemaTable();//查询出的结果集以表的形式得到完整的传给schema表
foreach(DataRow row in schema.Rows) //这时相当于对schema表进行操作了
{
foreach(DataColumn col in schema.Columns)
{
Console.WriteLine(col.ColumnName + "=" + row[col]);
Console.WriteLine("==========");
}
}
(C): reader.NextResult() 使用数据读取器处理多个结果集
string sql_1=@"select * from tab_1";
string sql_2=@" select * from tab_2";//这里一定要有个空格才可以 因为当两个SQL语句连接时要用空格分开
string sql =sql_1 + sql_2;
SqlCommand cmd =new SqlCommand(sql,con);//执行两个或多个SQL语句的联合查询
SqlDataReader reader =cmd.ExecuteReader();//这时有多个结果集
do
{
while(reader.Read())//读取一个结果集的所有内容
{
Console.WriteLine("{0}:{1}
string sql_1=@"select * from customers";
string sql_2=@" select * from products where unitprice <10";//注意当第二句连接时要有个空格
string sql = sql_1+sql_2;//两条SQL语句拼接
SqlConnection con =new SqlConnection(ConnectionString);
if (con.State==ConnectionState.Open)
{
con.Close();
}
try
{
con.Open();
SqlDataAdapter da=new SqlDataAdapter();//A
da.SelectCommand=new SqlCommand(sql,con);//B
//其中A和B两句合并相当于:SqlDataAdapter da=new SqlDataAdapter(sql,con);这一句
DataSet ds=new DataSet();
da.Fill(ds,"customers");
DataTableCollection dtc =ds.Tables;//通过这句把DataSet中的所有表都给了Table表集合
Console.WriteLine("Results frm Customers table:");
Console.WriteLine("CompanyName".PadRight(20) + "ContactName".PadLeft(23) + "\
");
//以下两句是筛选条件
string fl ="country='Germany'";//where 条件
string srt ="companyname asc"; //降序
//下面是知识点 数据集的筛选条件
foreach(DataRow row in dtc["customers"].Select(fl,srt))//这是用法
//dtc["customers"]说明:dtc表集合中的customers表 .Select() 就是筛选条件
{
Console.WriteLine("{0}\{1}
进行操作 DataView有自己的动态方法
DataView dv =new DataView(dt,"country='Germany'
dd("@city
来
{
Console.WriteLine("{0}{1}{2}
stBox1.SelectedIndex];
string str=rowView.Row.ItemArray[0].ToString();
MessageBox.Show("您选择的是:"+str,"***这种方法只能这样写代码,请看看");
***详见级联菜单的例子
用以下的cmd命令可以创建一个新的iis站点:
C:\\Inetpub\\AdminScripts> adsutil.vbs create_vserv W3SVC/2
C:\\Inetpub\\AdminScripts> adsutil.vbs copy W3SVC/1 W3SVC/2
[到9了]
删除:
C:\\Inetpub\\AdminScripts> adsutil.vbs delete W3SVC/2
List:
C:\\Inetpub\\AdminScripts> adsutil.vbs enum w3svc /p
当然,创建了以后也只能同时运行一个。