簡體   English   中英

C#處理SQL查詢的最佳方法

[英]C# best way to handle SQL query

我想用一個函數讀取數據庫記錄,並將結果作為數組傳遞給另一個函數。 如何使用.NET4.5?

namespace test
{
    class Program
    {
        static void Main()
        {
            ... data = GetData();
            string result = HandleData(data);
        }

        private static string HandleData(... data)
        {
            return string result
        }

        private static ... GetData()
        {
            ... result = new ...;
            SqlDataReader reader;
            using (SqlConnection conn = new SqlConnection(conf))
            {
                 string query = "SELECT [ID], [Desc], [tID] FROM [table] WHERE [Updated] = 0";
                 try
                 {
                     conn.Open();
                     SqlCommand cmd = new SqlCommand();
                     cmd.CommandText = query;
                     cmd.Connection = conn;
                     reader = cmd.ExecuteReader();

                     if(reader.HasRows)
                     {
                          while (reader.Read())
                          {
                               result.Add(reader[0], reader[1], reader[2]);
                          }
                     }
                     reader.Close();

                 }
                 catch(Exception e)
                 {
                 }
                 finnaly
                 {
                     conn.Close();
                     conn.Dispose();
                 }
             }
             return result;
         } 
     }
 }

我應該將Wich數據類型用於result變量,以及如何更正內部的組織數據?

遵循stackoverflow的規則,我將此文本添加到我的問題中,因為它說該問題主要包含代碼。

您可以將值從sql存儲到datatable,然后可以通過使用linq將datatable轉換為arrey,這是代碼

 Private static ... GetData()
           {
             try
                {
                  var dt = new DataTable();
                  var cmd = new SqlCommand();
                  cmd.CommandText = @"SELECT name,address FROM [table_name] WHERE id = @id";
                  cmd.Parameters.AddwithValue("@id",id);
                  var da = new SqlDataAdapter(cmd);
                  da.Fill(dt);
                }
             catch (Exception ex)
                {

                }
             finally
                {
                  if (cmd.Connection.State == ConnectionState.Open)
                   {
                     cmd.Connection.Close();
                   }
                }

               var stringArr = dt.Rows[0].ItemArray.Select(x => x.ToString()).ToArray();
               return stringArr;
           }

我認為最好的解決方案是:

    private static DataTable GetData()
    {
        DataTable result = new DataTable();
        using (SqlConnection conn = new SqlConnection(conf))
        {
             string query = "SELECT [ID], [Desc], [tID] FROM [table] WHERE [Updated] = 0";
             try
             {
                 conn.Open();
                 SqlCommand cmd = new SqlCommand();
                 cmd.CommandText = query;
                 cmd.Connection = conn;
                 SqlDataAdapter da = new SqlDataAdapter(cmd);
                 da.Fill(result);
                 da.Dispose();
             }
             catch(Exception e)
             {
             }
             finnaly
             {
                 conn.Close();
                 conn.Dispose();
             }
         }
         return result;
     } 

您應該構造DTO(數據傳輸對象)以在應用程序周圍傳遞值。

    private static void Main(string[] args)
    {
        var dt = new DataTable();

        var col = new DataColumn { DataType = typeof(int), ColumnName = "ID" }; dt.Columns.Add(col);
        col = new DataColumn { DataType = typeof(string), ColumnName = "Desc" }; dt.Columns.Add(col);
        col = new DataColumn { DataType = typeof(int), ColumnName = "tID" }; dt.Columns.Add(col);

        var row = dt.NewRow();
        {
            row["ID"] = 1;
            row["Desc"] = "This is description";
            row["tID"] = 2;
        }
        dt.Rows.Add(row);

        var dto = ToDTO<UpdatedDto>(dt);

    }

    private static List<object> ToDTO<T>(DataTable dt)
    {

        var reult = (from rw in dt.AsEnumerable()
                     select new UpdatedDto
                     {
                         ID = Convert.ToInt32(rw["ID"]),
                         Desc = Convert.ToString(rw["Desc"]),
                         tID = Convert.ToInt32(rw["tID"])
                     }).ToList();
        return reult.ConvertAll<object>(o => (object)o);
    }

這是我如何提取數據並將其解析為數組的方法代碼段。

public int find_data_on_id(string id, out string[] strTxnid)
  {
      cmd.Parameters.Clear();
      cmd.CommandText = @"SELECT name,address FROM [table_name] WHERE id = @id";
      cmd.Parameters.AddwithValue("@id",id);

      strTxnid = new string[5];

                try
                {
                    SqlDataReader dr = cmd.ExecuteReader();
                    dr.Read();
                    strTxnid[0] = dr["id"].ToString();
                    strTxnid[1] = dr["name"].ToString();
                    strTxnid[2] = dr["address"].ToString();
                    dr.Close();
                    return 0;
                }
                catch (Exception ex)
                {
                    console.writeline("db internal error");
                    return -1;
                }

    }

通話范例:

public void example_call()
  {
       string[] info;
       int Respond = find_data_on_id(1,out info );
       string name = info[1];
       string address = info[2];
  }

暫無
暫無

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

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