Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用数据库中的值填充数据表_C#_Visual Studio 2008_Datatable - Fatal编程技术网

C# 如何使用数据库中的值填充数据表

C# 如何使用数据库中的值填充数据表,c#,visual-studio-2008,datatable,C#,Visual Studio 2008,Datatable,我想用从数据库中获取的值填充数据表。我想将选择条件与文本框中的值一起使用。。我已经用C写了下面的代码,请告诉我这是否是一个正确的方法。它正在显示有关连接字符串的异常。。但是我想知道我的方法是否正确。。请发表评论 public partial class searchsale : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void

我想用从数据库中获取的值填充数据表。我想将选择条件与文本框中的值一起使用。。我已经用C写了下面的代码,请告诉我这是否是一个正确的方法。它正在显示有关连接字符串的异常。。但是我想知道我的方法是否正确。。请发表评论

public partial class searchsale : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        try
        {

            SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\rdb.mdf;Integrated Security=True;User Instance=True");

            conn.Open();
            string scriptname = TextBox1.Text;
            string accnum = TextBox2.Text;
            string sql = @"select scriptname,accnum,Quantity,price from transac where scriptname = @sn, accnum = @an and transactio = 'Sell'";
            SqlCommand cmd = new SqlCommand();
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = sql;
            cmd.Parameters.AddWithValue("@an", accnum);
            cmd.Parameters.AddWithValue("@sn", scriptname);
            SqlDataReader dr = cmd.ExecuteReader();
            DataTable dt = GetDataTable(sql);
        }
        catch (Exception ex)
        {
            Response.Write("error" + ex.ToString());
        }

    }
    private DataTable GetDataTable (string sql)
    {
        DataTable dt = new DataTable();
        using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ToString()))
        {
            SqlDataAdapter da = new SqlDataAdapter(sql, conn);
            da.Fill(dt);
        }
        return dt;
    }
}

代码中的错误是因为您没有设置命令的connection属性

对于使用数据表,最简单的方法是:

try
{
    var connection = @"your connection string";
    //your command
    var command = "your command";
    var dataAdapter = new System.Data.SqlClient.SqlDataAdapter(command, connection);
    var dataTable = new DataTable();

    //Get data
    dataAdapter.Fill(dataTable);
}
catch (System.Data.SqlClient.SqlException sqlEx)
{
    //Use sqlEx.Number to hanlde excception more specific
    //for example if sqlEx.Number -1 => Could Not Connect to Server.
}
catch (Exception ex)
{
}

问题在于GetDataTable字符串sql方法的下面代码行中。您必须使用ConnectionString属性。我建议您更多地阅读MSDN中关于ADO.NET的内容

using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ToString()))
        {
应该是

ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString
应该是这样的

using (SqlConnection conn = new 
SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
        {

除了连接字符串外,您的代码看起来是正确的。您已在开头将连接字符串声明为

  SqlConnection conn = new SqlConnection(@"Data      Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\rdb.mdf;Integrated Security=True;User Instance=True");
但在您的连接初始化中,它看起来像是从应用程序配置文件中获取的

using (SqlConnection conn = new  SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ToString()))
因此,不要在代码中设置连接,而是将其放在应用程序配置文件中,并从代码中删除连接 像这样的

     <?xml version="1.0"?>
<configuration>
  <connectionStrings>
    <add name="ConnectionString" 
    connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\rdb.mdf;Integrated Security=True;User Instance=True"/>
  </connectionStrings>
</configuration> 
谢谢,


Birhanu

先生,我需要使用select命令,该命令将使用文本框中的内容。。你能告诉我我所做的是否是正确的方法吗???@user2946329:Connection属性尚未初始化。在System.Data.SqlClient.SqlCommand中,这是我得到的异常。。。我会纠正它,但我想知道我是否使用了正确的方法,PLSSS确实查看了代码,并让我知道我是否以正确的方式解决了问题。。感谢uwrite和/或创建一个名为SqlHelper的静态类。例如,我将发布一个关于如何执行此操作的简单示例,当您希望填充数据表并返回它时,您可以从代码中的任何位置调用它。使用app.config添加您的连接字符串。我发布的内容非常容易阅读,并且假设您知道如何调用静态类的方法。。也不调用此DataTable dt=GetDataTablesql;通过传递适当的变量,可以调用var dt=SqlDBHelper.ExecuteDataSet,它将返回一个加载的DataTable。我每天都使用它。一旦我将它添加到我自己的utils类中,它将是一个救命稻草
     <?xml version="1.0"?>
<configuration>
  <connectionStrings>
    <add name="ConnectionString" 
    connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\rdb.mdf;Integrated Security=True;User Instance=True"/>
  </connectionStrings>
</configuration>