什么是从C#获取sql数据的最佳方法

Mad*_*Boy 6 c# sql sql-server

我正在尝试通过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个广泛使用的例子,所以我想获得最好的速度方法,最好是最容易维护(希望它会是同样的方法).

可能有一些更好的选择那么请分享?

Joh*_*ers 7

看来你可能正在看旧书.如果你要以"老式的方式"去做,那么你应该至少使用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)

更好的是,查看实体框架.

链接:数据开发人员中心