亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將 SELECT 查詢的結果保存到另一個表

將 SELECT 查詢的結果保存到另一個表

C#
慕慕森 2023-09-09 16:51:12
我有一個 SQL 查詢,使用 Visual Studio 查詢窗口生成在其下方找到的結果:SELECT SUM(TaskLength) AS TaskLength FROM myTable WHERE EventStartTime BETWEEN '2019/8/17' AND '2019/8/19' GROUP BY TaskName ORDER BY TaskLength查詢結果窗口產生以下內容:TaskName        TaskLength--------------------------Idle Time        20Start Shift      31Downtime         85Engineering     120Part Prep       141Maintenance     172Production      417 我下面的 C# 代碼僅返回一個字符串,表示一行中的一列。using (SqlConnection con = new SqlConnection(_connectionString)){     string query = @"SELECT SUM(TaskLength) AS TaskLength                       FROM myTable                       WHERE EventStartTime BETWEEN '2019/8/17' AND '2019/8/19'                       GROUP BY TaskName                       ORDER BY TaskLength";     using (SqlCommand cmd = new SqlCommand(query, con))     {          con.Open();          object result = cmd.ExecuteScalar();          string totalMinutes = Convert.ToString(result);     }}返回的對象是否cmd.ExecuteScalar代表整個結果表?如果沒有,還有其他方法可以做到這一點。我的想法是將結果保存到中間表(如果還沒有這樣做)并將其保存到那里的 .csv 文件,除非有更好的方法。
查看完整描述

1 回答

?
陪伴而非守候

TA貢獻1757條經驗 獲得超8個贊

ExecuteScalar僅返回第一行的第一列。
如果您有很多行要讀取,那么您需要調用ExecuteReader并使用返回的值進行循環,SqlDataReader.Read直到返回 false。
循環時,您將查詢結果存儲在某種列表中,創建與讀取器返回的信息相匹配的對象。

然后,這個列表可以很容易地用作某種用戶界面對象(如 DataGridView 或類似對象)的數據源,或者用于將數據寫入文件或其他存儲。

// The model that describes the data returned by the query

public class TaskData

{

? ? public string Name {get;set;}

? ? public int Length {get;set;}

}?


.....?

// Where you store each record retrieved by the query

List<TaskData> results = new List<TaskData>();


using (SqlConnection con = new SqlConnection(_connectionString))

{

? ?// Added the taskname to the query

? ?string query = @"SELECT TaskName, SUM(TaskLength) as TaskLength?

? ? ? ? ? ? ? ? ? FROM myTable?

? ? ? ? ? ? ? ? ? WHERE EventStartTime?

? ? ? ? ? ? ? ? ? BETWEEN '2019/8/17' AND '2019/8/19'?

? ? ? ? ? ? ? ? ? GROUP BY TaskName ORDER BY TaskLength";


? ?using (SqlCommand cmd = new SqlCommand(query, con))

? ?{

? ? ? con.Open();


? ? ? // Get a reader to loop over the results

? ? ? using(SqlDataReader reader = cmd.ExecuteReader())

? ? ? {

? ? ? ? ? // Start reading data (until there are no more records to read)

? ? ? ? ? while(reader.Read())

? ? ? ? ? {

? ? ? ? ? ? ? ?// From the current record build the TaskData info

? ? ? ? ? ? ? ?TaskData data = new TaskData

? ? ? ? ? ? ? ?{

? ? ? ? ? ? ? ? ? ?Name = reader["TaskName"].ToString(),

? ? ? ? ? ? ? ? ? ?Length = Convert.ToInt32(reader["TaskLength"]);

? ? ? ? ? ? ? ?}


? ? ? ? ? ? ? ?// Add this info the the collection of your results

? ? ? ? ? ? ? ?results.Add(data);

? ? ? ? ? }

? ? ? }

? ?}

}

現在,如果您想將結果存儲到 CSV 文件中,代碼很簡單


File.WriteAllLines("yourFile.csv",?

? ? ? string.Join(Environment.NewLine,?

? ? ? ? ? ? ?results.Select(x => x.Name +","+x.Length))


查看完整回答
反對 回復 2023-09-09
  • 1 回答
  • 0 關注
  • 178 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號