簡體   English   中英

如何使用數據庫中的值填充數據表

[英]how can I populate data table with values from a database

我想用數據庫中的值填充數據表。 我想使用Select條件和從文本框中獲取的值。我在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;
    }
}

您的代碼出錯是因為您沒有設置命令的連接屬性。

對於使用數據表,最簡單的方法是使用:

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 (string 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))
        {
public static class SqlDBHelper
{
    public static DataSet ExecuteDataSet(string sql, CommandType cmdType, params SqlParameter[] parameters)
    {
        using (DataSet ds = new DataSet())
        using (SqlConnection connStr = new SqlConnection(ConfigurationManager.ConnectionStrings["DbConn"].ConnectionString))
        using (SqlCommand cmd = new SqlCommand(sql, connStr))
        {
            cmd.CommandType = cmdType;
            foreach (var item in parameters)
            {
                cmd.Parameters.Add(item);
            }

            try
            {
                cmd.Connection.Open();
                new SqlDataAdapter(cmd).Fill(ds);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return ds;
        }
    }
}

您的代碼看起來正確,連接字符串除外。 您已在開頭聲明了連接字符串

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

但在您的連接初始化中,它看起來就像是從App配置文件中獲取它。

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

因此,不要在代碼中建立連接,而是將其放在app配置文件中,並從代碼中刪除這樣的連接

     <?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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM