C# C处理SQL查询的最佳方法
我想用一个函数读取数据库记录,并将结果作为数组传递给另一个函数。我如何使用.NET4.5实现它C# C处理SQL查询的最佳方法,c#,sql,.net-4.5,C#,Sql,.net 4.5,我想用一个函数读取数据库记录,并将结果作为数组传递给另一个函数。我如何使用.NET4.5实现它 namespace test { class Program { static void Main() { ... data = GetData(); string result = HandleData(data); } private static string Han
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;
}
}
}
结果变量应该使用哪种数据类型,以及如何正确组织内部数据
遵循stackoverflow的规则,我将此文本添加到我的问题中,因为它说问题主要包含代码。您应该构造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);
}
您应该构造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];
}
下面是我的方法的代码块,介绍了如何提取数据并将其解析为数组
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];
}
您可以将值从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;
}
您可以将值从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;
}
我认为最好的解决方案是:
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;
}
使用Datatable作为DTO。为什么不使用一些ORM来获取数据呢。我建议使用EntityFramework。它将很容易处理,所需的代码也非常少。使用Datatable作为DTO。为什么不使用一些ORM来获取数据呢。我建议使用EntityFramework。它将很容易处理,所需的代码将非常少。您的函数返回int,但我需要得到类似于数组的东西。我将返回out字符串[]上的数组。这意味着我有两个回报。。int用于我个人的签出,字符串[]是数据。但问题是从db获取数据并将其传递给另一个函数。我对C中的这一问题感到困惑。使用JS或Python,我可以创建一个数组并填充它,而无需任何附加代码。因此,使用C,我似乎必须创建一些魔法仪式来实现简单的事情。如果它在同一个.cs文件中,只需直接调用函数,我更新了我的应答。你的函数返回int,但我需要得到类似于数组的东西。我返回out string[]上的数组。这意味着我有两个回报。。int用于我个人的签出,字符串[]是数据。但问题是从db获取数据并将其传递给另一个函数。我对C中的这一问题感到困惑。使用JS或Python,我可以创建一个数组并填充它,而无需任何附加代码。因此,使用C,我似乎必须创建一些魔法仪式来实现简单的事情。如果它在同一个.cs文件中,只需直接调用函数,我就更新了我的答案。实际上,我并不打算在数组中存储数据,我的意思是一个数组,比如typeuse string datatype,它适用于所有类型的数据,并在将数组值传递给variable时进行转换。实际上,我无意在数组中存储数据,我的意思是像typeuse string datatype这样的数组,它将适用于所有类型的数据,并在将数组值传递给变量时转换它们