c# - 这种方法是从 C# 获取 SQL 值的好方法吗?

标签 c# sql-server .net-3.5

我有这个小方法可以用来从 SQL 中获取数据。我用 varSearch = ""varSearch = "something" 来调用它。我想知道以这种方式编写方法是最好的还是将它分成两个方法(通过重载)会更好,或者我可以以某种方式参数化整个 WHERE 子句?

private void sqlPobierzKontrahentDaneKlienta(ListView varListView, string varSearch) {
        varListView.BeginUpdate();
        varListView.Items.Clear();
        string preparedCommand;
        if (varSearch == "") {
            preparedCommand = @"
                SELECT t1.[KlienciID],
                CASE WHEN t2.[PodmiotRodzaj] = 'Firma' THEN
                          t2.[PodmiotFirmaNazwa] ELSE 
                          t2.[PodmiotOsobaNazwisko] + ' ' + t2.[PodmiotOsobaImie] END AS 'Nazwa'
                FROM [BazaZarzadzanie].[dbo].[Klienci] t1
                INNER JOIN [BazaZarzadzanie].[dbo].[Podmioty] t2
                ON t1.[PodmiotID] = t2.[PodmiotID]
                ORDER BY t1.[KlienciID]";
        } else {
            preparedCommand = @"
                SELECT t1.[KlienciID],
                CASE WHEN t2.[PodmiotRodzaj] = 'Firma' THEN
                          t2.[PodmiotFirmaNazwa] ELSE 
                          t2.[PodmiotOsobaNazwisko] + ' ' + t2.[PodmiotOsobaImie] END AS 'Nazwa'
                FROM [BazaZarzadzanie].[dbo].[Klienci] t1
                INNER JOIN [BazaZarzadzanie].[dbo].[Podmioty] t2
                ON t1.[PodmiotID] = t2.[PodmiotID]
                WHERE t2.[PodmiotOsobaNazwisko] LIKE @searchValue OR t2.[PodmiotFirmaNazwa] LIKE @searchValue OR t2.[PodmiotOsobaImie] LIKE @searchValue
                ORDER BY t1.[KlienciID]";
        }
        using (var varConnection = Locale.sqlConnectOneTime(Locale.sqlDataConnectionDetails))
        using (SqlCommand sqlQuery = new SqlCommand(preparedCommand, varConnection)) {
            sqlQuery.Parameters.AddWithValue("@searchValue", "%" + varSearch + "%");
            using (SqlDataReader sqlQueryResult = sqlQuery.ExecuteReader())
                if (sqlQueryResult != null) {
                    while (sqlQueryResult.Read()) {
                        string varKontrahenciID = sqlQueryResult["KlienciID"].ToString();
                        string varKontrahent = sqlQueryResult["Nazwa"].ToString();
                        ListViewItem item = new ListViewItem(varKontrahenciID, 0);
                        item.SubItems.Add(varKontrahent);
                        varListView.Items.AddRange(new[] {item});
                    }
                }
        }
        varListView.EndUpdate();
    }

最佳答案

更好的方法实际上是使用存储过程而不是将 SQL 硬编码到您的应用程序中。您可以将 where 子句参数传递给存储过程并在数据库端处理逻辑。

这种方法还提供了一个优势,如果您在另一个应用程序(例如 JAVA 应用程序)中需要此逻辑,则该逻辑集中在数据库中,因此您不必再次重写它。

关于c# - 这种方法是从 C# 获取 SQL 值的好方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2629733/

相关文章:

c# - 从 Ilist<> 到 List<> 的 Linq 查询转换

c# - 使用 .NET 创建 Symbian 应用程序

C# 的滚动条装饰?

sql-server - 我可以根据查询在 SSIS for 循环中设置变量吗?

wcf - 检查 WCF 服务是否存在

c# - 从 xsd 架构中提取 XPath

sql - 如何创建仅获取表中已更新数据的查询

sql-server - TSQL:在触发器中 try catch 事务

C# : Obscure object ref error

C# 数据集和 Crystal Reports