sql语句怎么逐条读取一个表中的数据?

sql语句怎么逐条读取一个表中的数据?,第1张

用“游标”即可,语法如下:

delcare c1 cursor for //c1为游标名

select a from table

open c1

while 1=1 begin

fetch a into @a1  //@a1是变量,这句作用是每一次都把每一行的a赋给变量@a1

if @@sqlcode = 2 begin//游标结束

   break

end

.......//你的逻辑

end

1,INSERTINTOSELECT语句

语句形式为:InsertintoTable2(field1,field2,...)selectvalue1,value2,...fromTable1

要求目标表Table2必须存在,由于目标表Table2已经存在,所以除了插入源表Table1的字段外,还可以插入常量。

2,SELECTINTOFROM语句

语句形式为:SELECTvale1,value2intoTable2fromTable1

要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中。

高级查询如下:

A:UNION运算符

UNION运算符通过组合其他两个结果表(例如TABLE1和TABLE2)并消去表中任何重复行而派生出一个结果表。当ALL随UNION一起使用时(即UNIONALL),不消除重复行。两种情况下,派生表的每一行不是来自TABLE1就是来自TABLE2。

B:EXCEPT运算符

EXCEPT运算符通过包括所有在TABLE1中但不在TABLE2中的行并消除所有重复行而派生出一个结果表。当ALL随EXCEPT一起使用时(EXCEPTALL),不消除重复行。

嗯。。先解决你的疑问,你有没有发现

MessageBox.Show(Convert.ToString(cmd.CommandText))

里面显示的是 cmd.CommandText。

而 cmd.CommandText 正是你上一行代码给赋的值。

好了。来改改代码吧。

首先 conn 和 cmd 的声明有错误。

conn 作为一个数据库的连接对象。我们应该把连接字符串赋给它。也就是:

SqlConnection conn = new SqlConnection("Server =.DataBase = masterUser Id = saPwd = sa")

cmd的构造函数,如果只传递一个参数的话。那么这个参数应该是查询语句,也就是你第三行写到的 "Select a from 111111" 我想问一下。用11111作表名。不会有问题么。呵呵 。感觉很奇怪。建议表名还是包含一些英文字母吧。

一般用两个参数的构造函数,第二个参数是连接对象

cmd的声明可以这样:

SqlCommand cmd = new SqlCommand("Select a from 111111",conn)

或者是

SqlCommand cmd = new SqlCommand()

cmd.CommandText = "Select a from 111111"

cmd.Connection = conn

声明完毕,开始准备取结果了。

如果要显示查询结果的话。首先你要做的就是打开连接,并执行这条查询,在ADO.NET里面。我们可以使用 ExecuteScalar() 来返回查询结果的第一行第一列的值。查询完毕记得把连接关闭。

也就是说,如果你要显示的只是查询到的第一个A的值的话 可以使用

conn.Open()

MessageBox.Show(cmd.ExecuteScalar().ToString())

conn.Close()

conn.Dispose()

=====================================================

如果要显示多行的话。可以考虑用 DataTable 或者是 SqlDataReader;

返回DataTable的话,需要用到数据库适配器: SqlDataAdapter

这样声明的:SqlDataAdapter da = new SqlDataAdapter(cmd)

另外 SqlDataAdapter 是不需要手动打开连接的。它会自己打开一个连接

那么 再定义一个DataTable 用于保存查询结果

DataTable dt = new DataTable ()

这样一来。我们就可以使用适配器来填充这个表格。像这样:

da.Fill(dt)

得到的 dt 就是我们需要的结果了。

查询完毕记得把连接断开。

整理一下代码

SqlConnection conn = new SqlConnection("Server =.DataBase = masterUser Id = saPwd = sa")

SqlCommand cmd = new SqlCommand("Select a from 111111",conn)

SqlDataAdapter da = new SqlDataAdapter(cmd)

DataTable dt = new DataTable()

da.Fill(dt)

conn.Close()

conn.Dispose()

剩下的就是显示了。用for 或者是 foreach进行循环取出里面的值。

===========================================================

DataReader 的情况差不多。手动打开连接。

SqlDataReader sdr = cmd.ExecuteReader( CommandBehavior.CloseConnection )

里面的CommandBehavior.CloseConnection 表示 ,当这个reader关闭时。连接也自动关闭。所以用完后 只需要执行sdr.Close()就行了。。

但是如果你是这样声明的

SqlDataReader sdr = cmd.ExecuteReader()

用完后

光执行 sdr.Close()是不行的,还需要手动把conn给关闭了,像这样:

conn.Close()

conn.Dispose()

代码整理一下:

SqlConnection conn = new SqlConnection("Server =.DataBase = masterUser Id = saPwd = sa")

conn.Open()

SqlCommand cmd = new SqlCommand("Select a from 111111",conn)

SqlDataReader sdr = cmd.ExecuteReader( CommandBehavior.CloseConnection )

while(sdr.Read()){

//这里执行你的代码 ,如: MessageBox.Show( sdr.GetString(0))

}

sdr.Close()


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12005240.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-20
下一篇2023-05-20

发表评论

登录后才能评论

评论列表(0条)

    保存