c# 应用程序如何读取SQL数据

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using System.Data.SqlClient;
using System.Data.Odbc;
using System.Configuration;

namespace _
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection();
SqlCommand cmd = new SqlCommand("Server =.;DataBase = master;User Id = sa;Pwd = sa;");
cmd.CommandText = "Select a from 111111";
MessageBox.Show(Convert.ToString(cmd.CommandText));
}
}
}

为什么这样读出来的不是字段a里的数据,而是把这个语句给显示出来了,我应该怎么做才能把字段a里的数据读出来呢?本人菜鸟,刚学C#,望高手不吝赐教,先谢谢了。

嗯。。先解决你的疑问,你有没有发现
MessageBox.Show(Convert.ToString(cmd.CommandText));
里面显示的是 cmd.CommandText。
而 cmd.CommandText 正是你上一行代码给赋的值。

好了。来改改代码吧。
首先 conn 和 cmd 的声明有错误。
conn 作为一个数据库的连接对象。我们应该把连接字符串赋给它。也就是:

SqlConnection conn = new SqlConnection("Server =.;DataBase = master;User Id = sa;Pwd = 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 = master;User Id = sa;Pwd = 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 = master;User Id = sa;Pwd = 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();
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-03-15
private void Form1_Load(object sender, EventArgs e)
{
SqlCommand conn= new SqlConnection("Server =.;DataBase = master;User Id = sa;Pwd = sa;");

conn.Open();
SqlCommand cmd = new SqlCommand(conn);
cmd.CommandText = "Select a from tabel1";
DbReader rd = cmd.executequery();
while(rd.Read())
{
MessageBox.Show(rd["a"]);
}
rd.Close();

}

拼写问题自己改一下。
第2个回答  2010-03-15
如果查询结果只有一行:
MessageBox.Show(Convert.ToString(cmd.ExecuteScalar()));
如果查询结果有多行:
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read()) { 。。。 }

关键掌握cmd.ExecuteNonQuery(); cmd.ExecuteReader();cmd.ExecuteScalar();三种方法,上网查一查。MSDN也会对你很有帮助。
相似回答
大家正在搜