C# 从共享相同外键的不同列读取多行 SQL
C# Read multiple rows from different columns sharing same Foreign key SQL
我想要一种有效的方法来检索 table 中共享相同外键的所有信息,并将数据存储在 list/array.
中
我可以从一列读取多行:
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
int idForeignKey = inputIdFkey //Implemented on the WebPage for testing purposes
List<string> result = new List<string>();
string oString = "Select Column from Table where foreignKey = @fKey";
conn.Open();
SqlCommand oCmd = new SqlCommand(oString, conn);
oCmd.Parameters.AddWithValue("@fKey", idForeignKey);
using (SqlDataReader oReader = oCmd.ExecuteReader())
{
while (oReader.Read())
{
result.Add(oReader.GetString(0));
}
}
conn.Close();
如果我针对一个特定的行,我可以阅读多个专栏:
int sqlData1;
int sqlData2;
int sqlData3;
string oString = "Select * from Table where TableID = @tId";
SqlCommand oCmd = new SqlCommand(oString, conn);
oCmd.Parameters.AddWithValue("@tId", 1001);
conn.Open();
using (SqlDataReader oReader = oCmd.ExecuteReader())
{
while (oReader.Read())
{
sqlData1 = oReader["Row1"].ToString();
sqlData2 = oReader["Row2"].ToString();
sqlData3 = oReader["Row3"].ToString();
}
}
conn.Close();
但我希望能够读取具有相同外键的 all/specific 数据。所以我希望能够检索多行,将它们保存到列表中,并从共享相同外键的不同列中检索其他几行数据。
我想象它是这样的:
int idForeignKey = inputIdFkey //Implemented on the WebPage for testing purposes
List<int> intList = new List<int>();
List<string> stringList = new List<string>();
List<DateTime> dateList = new List<DateTime>();
string oString = "Select * from Table where ForeignKey = @fKey";
conn.Open();
SqlCommand oCmdSleep = new SqlCommand(oString, conn);
oCmdSleep.Parameters.AddWithValue("@fKey", idForeignKey);
using (SqlDataReader oReader = oCmdSleep.ExecuteReader())
{
while (oReader.Read())
{
intList.Add(oReader["Column1"].GetDateTime(0));
dstringList.Add(oReader["Column3"].GetDateTime(0));
dateList.Add(oReader["Column4"].GetDateTime(0));
}
}
conn.Close();
但这行不通...请多多指教
如果您使用 Dapper 之类的东西,它将简化将您的查询结果映射到 List<T>
.
使用 nuget 将 Dapper 添加到您的项目中。
Install-Package Dapper -Version 1.50.5
在 class 查询的顶部添加 using for Dapper。
using Dapper;
添加与您的查询结果结构相匹配的 class。有多种方法可以使用脚本或实用程序来执行此操作。 Here's an app for that.
public class MyClass
{
public int MyId { get; set; }
public string MyName { get; set; }
public DateTime MyDateTime { get; set; }
}
那么你 运行 查询就是这样做的。
using (conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
{
var MyList = conn.Query<MyClass>(@"select * from Table where ForeignKey = @fKey",
new { fKey = "SomeKey" }).ToList();
}
一旦查询 运行s,您就可以遍历 MyList。
foreach (var myItem in MyList)
{
// Do something with myItem
}
如果要绑定结果,只需从查询末尾删除 .ToList()
,因为其默认值为 IObservable<T>
。
无需给出列名,直接使用已经建立的索引即可:
int idForeignKey = inputIdFkey //Implemented on the WebPage for testing purposes
List<int> intList = new List<int>();
List<string> stringList = new List<string>();
List<DateTime> dateList = new List<DateTime>();
string oString = "Select * from Table where ForeignKey = @fKey";
conn.Open();
SqlCommand oCmdSleep = new SqlCommand(oString, conn);
oCmdSleep.Parameters.AddWithValue("@fKey", idForeignKey);
using (SqlDataReader oReader = oCmdSleep.ExecuteReader())
{
while (oReader.Read())
{
intList.Add(oReader.GetDateTime(0));
dstringList.Add(oReader.GetDateTime(3));
dateList.Add(oReader.GetDateTime(4));
}
}
conn.Close();
细目如下:
listVariable.Add(oReader.GetDataType("Index of column"));
通过这种方式,您可以检索共享外键的所有行数据,并可以根据需要检索任意数量的列。
我想要一种有效的方法来检索 table 中共享相同外键的所有信息,并将数据存储在 list/array.
中我可以从一列读取多行:
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
int idForeignKey = inputIdFkey //Implemented on the WebPage for testing purposes
List<string> result = new List<string>();
string oString = "Select Column from Table where foreignKey = @fKey";
conn.Open();
SqlCommand oCmd = new SqlCommand(oString, conn);
oCmd.Parameters.AddWithValue("@fKey", idForeignKey);
using (SqlDataReader oReader = oCmd.ExecuteReader())
{
while (oReader.Read())
{
result.Add(oReader.GetString(0));
}
}
conn.Close();
如果我针对一个特定的行,我可以阅读多个专栏:
int sqlData1;
int sqlData2;
int sqlData3;
string oString = "Select * from Table where TableID = @tId";
SqlCommand oCmd = new SqlCommand(oString, conn);
oCmd.Parameters.AddWithValue("@tId", 1001);
conn.Open();
using (SqlDataReader oReader = oCmd.ExecuteReader())
{
while (oReader.Read())
{
sqlData1 = oReader["Row1"].ToString();
sqlData2 = oReader["Row2"].ToString();
sqlData3 = oReader["Row3"].ToString();
}
}
conn.Close();
但我希望能够读取具有相同外键的 all/specific 数据。所以我希望能够检索多行,将它们保存到列表中,并从共享相同外键的不同列中检索其他几行数据。
我想象它是这样的:
int idForeignKey = inputIdFkey //Implemented on the WebPage for testing purposes
List<int> intList = new List<int>();
List<string> stringList = new List<string>();
List<DateTime> dateList = new List<DateTime>();
string oString = "Select * from Table where ForeignKey = @fKey";
conn.Open();
SqlCommand oCmdSleep = new SqlCommand(oString, conn);
oCmdSleep.Parameters.AddWithValue("@fKey", idForeignKey);
using (SqlDataReader oReader = oCmdSleep.ExecuteReader())
{
while (oReader.Read())
{
intList.Add(oReader["Column1"].GetDateTime(0));
dstringList.Add(oReader["Column3"].GetDateTime(0));
dateList.Add(oReader["Column4"].GetDateTime(0));
}
}
conn.Close();
但这行不通...请多多指教
如果您使用 Dapper 之类的东西,它将简化将您的查询结果映射到 List<T>
.
使用 nuget 将 Dapper 添加到您的项目中。
Install-Package Dapper -Version 1.50.5
在 class 查询的顶部添加 using for Dapper。
using Dapper;
添加与您的查询结果结构相匹配的 class。有多种方法可以使用脚本或实用程序来执行此操作。 Here's an app for that.
public class MyClass
{
public int MyId { get; set; }
public string MyName { get; set; }
public DateTime MyDateTime { get; set; }
}
那么你 运行 查询就是这样做的。
using (conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
{
var MyList = conn.Query<MyClass>(@"select * from Table where ForeignKey = @fKey",
new { fKey = "SomeKey" }).ToList();
}
一旦查询 运行s,您就可以遍历 MyList。
foreach (var myItem in MyList)
{
// Do something with myItem
}
如果要绑定结果,只需从查询末尾删除 .ToList()
,因为其默认值为 IObservable<T>
。
无需给出列名,直接使用已经建立的索引即可:
int idForeignKey = inputIdFkey //Implemented on the WebPage for testing purposes
List<int> intList = new List<int>();
List<string> stringList = new List<string>();
List<DateTime> dateList = new List<DateTime>();
string oString = "Select * from Table where ForeignKey = @fKey";
conn.Open();
SqlCommand oCmdSleep = new SqlCommand(oString, conn);
oCmdSleep.Parameters.AddWithValue("@fKey", idForeignKey);
using (SqlDataReader oReader = oCmdSleep.ExecuteReader())
{
while (oReader.Read())
{
intList.Add(oReader.GetDateTime(0));
dstringList.Add(oReader.GetDateTime(3));
dateList.Add(oReader.GetDateTime(4));
}
}
conn.Close();
细目如下:
listVariable.Add(oReader.GetDataType("Index of column"));
通过这种方式,您可以检索共享外键的所有行数据,并可以根据需要检索任意数量的列。