
用“游标”即可,语法如下:
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()
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)