回答

收藏

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

技术问答 技术问答 267 人阅读 | 0 人回复 | 2023-09-14

我试图通过C#找到最好的代码(快速和最简单)访问SQL Server代码的方法。% ]( f8 _. Q; _! Z; P
当我从书本上学习时,我遇到了很多建议,通常都建议我通过拖放来完成。但是,由于我想在代码中做到这一点,所以第一种方法是按列号获取数据,但是SQL6 {+ G% y9 b% M0 J8 H% L
Query我很难解决任何重新排序(如添加/删除列)。
) x( O% G' |6 ?1 i例如(别笑,有些代码大约有两年的历史),我甚至写了一个特殊的函数来传递sqlQueryResult并检查它是否为null):) w6 z; e) W( K8 s+ @4 B! a
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();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;}    }后来我发现通过列名阅读似乎更容易(使用多列和许多变化的顺序):
) }0 q8 \- q; M) n& f* l- R8 a7 D) w    varValue);        SqlDataReader sqlQueryResult = sqlQuery.ExecuteReader();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;if (sqlQueryResult != null)                while (sqlQueryResult.Read())                    string var1 = (string) sqlQueryResult["SomeColumn"];            string var2 = (string) sqlQueryResult["SomeColumn2"];                                     sqlQueryResult.Close();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;}    }varValue);        SqlDataReader sqlQueryResult = sqlQuery.ExecuteReader();        if (sqlQueryResult != null) {            while (sqlQueryResult.Read()) {                string var1 = (string) sqlQueryResult["SomeColumn"];            string var2 = (string) sqlQueryResult["SomeColumn2"];            }            sqlQueryResult.Close();        }    }第三个示例按列名操作,但使用.ToString()确保它不是空值,或检查空值If / else。
% C2 l! O7 k' f0 E    varValue);        SqlDataReader sqlQueryResult = sqlQuery.ExecuteReader();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;if (sqlQueryResult != null) {            while (sqlQueryResult.Read()) {                string var1 = (string) sqlQueryResult["SomeColumn"].ToString();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;    DateTime var二、二;          DateTime.TryParse(sqlQueryResult["SomeColumn2"].ToString();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;int varInt = ((int) sqlQueryResult["SomeColumn3"] == null (int) sqlQueryResult["SomeColumn3"];                                     sqlQueryResult.Close();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;}    }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();        }    }请记住,我只是为这个例子创建的。可能会有一些错误的单词或语法错误,但主要问题是哪种方法最好,哪种方法最差(我知道第一种是我最不喜欢的)。
% J" ]" i6 K7 g- L/ f$ [1 |我很快就要开始/重写我的9万行小应用程序的一些部分。这三个例子至少被广泛使用,所以我想得到最好的速度方法,最好的维护方法(希望这是同样的方法)。% L- n4 k8 O, s
可能有更好的选择,请分享?
4 d0 W6 S' k3 U) T                                                               
9 t* F: s$ L/ D. T    解决方案:                                                               
) |: V2 x* _  y" G7 ~- q( O/ @. u                                                                看来你可能在读旧书。如果要以老式操作,至少要用using块。概括:
0 R9 W: I% a) A3 L1 M/ I- Wusing (var connection = new SqlConnection(connectionString)){    using (var command = new SqlCommand(commandString,connection))                                                                                                                                                                                                                 using (var reader = command.ExecuteReader())                                                                                                                                                                                                                          // Use the reader      更好的是,研究Entity Framework。; L. Z: R" f  I
链接:数据开发人员中心
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则