最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

C#操作SQL经典

来源:动视网 责编:小OO 时间:2025-09-23 16:24:13
文档

C#操作SQL经典

ADO.NET中对数据库的操作是:断开式连接,只需要写一次连接服务器,库名,用户名,密码的字符串,以后只对con进行close()和con.Open()操作即可连接数据库先从数据库中取出结果集后进行处理数据后再UpData更新到数据库(共三步)如果只想读取和显示数据则只需使用数据读取器SqlDataReader即可,但要处理数据然后更新数据库(增加,更改),就需要用数据集DataSet和数据适配器SqlDataAdaperSqlDataAdapter在下面有用法:其中:读取数据时用SqlDat
推荐度:
导读ADO.NET中对数据库的操作是:断开式连接,只需要写一次连接服务器,库名,用户名,密码的字符串,以后只对con进行close()和con.Open()操作即可连接数据库先从数据库中取出结果集后进行处理数据后再UpData更新到数据库(共三步)如果只想读取和显示数据则只需使用数据读取器SqlDataReader即可,但要处理数据然后更新数据库(增加,更改),就需要用数据集DataSet和数据适配器SqlDataAdaperSqlDataAdapter在下面有用法:其中:读取数据时用SqlDat
ADO.NET中对数据库的操作是:断开式连接,只需要写一次连接服务器,库名,用户名,密码的字符串,以后只对con 进行close()和con.Open() 操作即可连接数据库

先从数据库中取出结果集后进行处理数据后再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

当然,创建了以后也只能同时运行一个。