我正在尝试通过c#中的代码找到最佳(快速和最简单)方式来访问SQL Server代码.
当我从书本中学习时,我遇到了多个建议,通常告诉我通过拖放来做.但是,因为我想在代码中执行它,所以第一个方法是按列号获取数据,但SQL查询中的任何重新排序(如添加/删除列)都让我很难解决.
例如(不要笑,有些代码就像2岁),我甚至编写了特殊的函数来传递sqlQueryResult并检查它是否为null):
public static void exampleByColumnNumber(string varValue) {
string preparedCommand = @"SELECT TOP 1 [SomeColumn],[SomeColumn2]
FROM [Database].[dbo].[Table]
WHERE [SomeOtherColumn] = @varValue";
SqlCommand sqlQuery = new SqlCommand(preparedCommand, Locale.sqlDataConnection);
sqlQuery.Prepare();
sqlQuery.Parameters.AddWithValue("@varValue) ", varValue);
SqlDataReader sqlQueryResult = sqlQuery.ExecuteReader();
if (sqlQueryResult != null) {
while (sqlQueryResult.Read()) {
string var1 = Locale.checkForNullReturnString(sqlQueryResult, 0);
string var2 = Locale.checkForNullReturnString(sqlQueryResult, 1);
}
sqlQueryResult.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
后来我发现它可能通过列名称(这似乎更容易阅读多列和大量更改顺序等):
public static void exampleByColumnNames(string varValue) {
string preparedCommand = @"SELECT TOP 1 [SomeColumn],[SomeColumn2]
FROM [Database].[dbo].[Table]
WHERE [SomeOtherColumn] = @varValue";
SqlCommand sqlQuery = new SqlCommand(preparedCommand, Locale.sqlDataConnection);
sqlQuery.Prepare();
sqlQuery.Parameters.AddWithValue("@varValue) ", varValue);
SqlDataReader sqlQueryResult = sqlQuery.ExecuteReader();
if (sqlQueryResult != null) {
while (sqlQueryResult.Read()) {
string var1 = (string) sqlQueryResult["SomeColumn"];
string var2 = (string) sqlQueryResult["SomeColumn2"];
}
sqlQueryResult.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
第三个例子是通过列名来实现的,但使用.ToString()来确保它不是空值,或者通过在null检查上执行If/else.
public static void exampleByColumnNamesAgain(string varValue) {
string preparedCommand = @"SELECT TOP 1 [SomeColumn],[SomeColumn2], [SomeColumn3]
FROM [Database].[dbo].[Table]
WHERE [SomeOtherColumn] = @varValue";
SqlCommand sqlQuery = new SqlCommand(preparedCommand, Locale.sqlDataConnection);
sqlQuery.Prepare();
sqlQuery.Parameters.AddWithValue("@varValue) ", varValue);
SqlDataReader sqlQueryResult = sqlQuery.ExecuteReader();
if (sqlQueryResult != null) {
while (sqlQueryResult.Read()) {
string var1 = (string) sqlQueryResult["SomeColumn"].ToString();
DateTime var2;
DateTime.TryParse(sqlQueryResult["SomeColumn2"].ToString());
int varInt = ((int) sqlQueryResult["SomeColumn3"] == null ? 0 : (int) sqlQueryResult["SomeColumn3"];
}
sqlQueryResult.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
请记住,我刚刚为此示例创建了这个,并且可能存在一些拼写错误或一些轻微的语法错误,但主要问题是哪种方法最好,哪种方法最差(我知道第一种方法是一种方法)我不喜欢最多).
我将很快开始/重新编辑我的小90k行应用程序的一部分,至少有3个广泛使用的例子,所以我想获得最好的速度方法,最好是最容易维护(希望它会是同样的方法).
可能有一些更好的选择那么请分享?
看来你可能正在看旧书.如果你要以"老式的方式"去做,那么你应该至少使用using块.摘要:
using (var connection = new SqlConnection(connectionString))
{
using (var command = new SqlCommand(commandString, connection))
{
using (var reader = command.ExecuteReader())
{
// Use the reader
}
}
}
Run Code Online (Sandbox Code Playgroud)
更好的是,查看实体框架.
链接:数据开发人员中心