如何在VB.NET中设置和管理多个SQL Server脚本?

时间:2017-11-21 00:43:34

标签: sql-server vb.net

我有一个简单的问题。设置管理多个SQL Server查询的最佳方法是什么?我对以下概念很满意。

Dim strtdate As String
Dim enddate As String

strtdate = DateTimePicker1.Value.ToString("mm/dd/yyyy")
enddate = DateTimePicker2.Value.ToString("mm/dd/yyy")
'MsgBox(strtdate)

Using con As New SqlConnection(connectionString)
    Using cmd As SqlCommand = con.CreateCommand()
        cmd.CommandText = "SELECT * FROM MyTable WHERE AsOfDate BETWEEN @noticestartdate END @noticeenddate"
        cmd.Parameters.AddWithValue("@noticestartdate", strtdate)
        cmd.Parameters.AddWithValue("@noticeenddate", enddate)
        cmd.CommandType = CommandType.Text
        Using sda As New SqlDataAdapter(cmd)
            Using dt As New DataTable()
                sda.Fill(dt)
                DataGridView1.DataSource = dt
            End Using
        End Using
    End Using
End Using

问题是,我希望能够创建几十个类似于上面的查询,但每个查询都会略有不同。我可以很好地创建所有SQL脚本。我只是不确定如何存储和检索我需要使用的所有查询。我绝对不想硬编码所有这些,并从DateTime Picker传递日期。我只是想了解如何创建一个SQL语句库,并使一切都很容易维护。我在考虑将查询名称存储在表中,以及我需要执行的SQL,但我不确定这是否可行。我应该创建几十个SProcs,并通过某种控制来调用它们吗?这似乎有点矫枉过正。我只想弄清楚设置和维护这个过程的最佳方法。

我的表格如下:

enter image description here

我的SQL Server表看起来像这样。

enter image description here

基本上......我在考虑感受&#39; ReportName&#39;进入ListBox  当用户选择报告时,例如Sum_Of_Deal_Balance_By_Month&#39;,我希望触发相关的SQL:declare @startDate datetime declare @endDate datetime declare @Name varchar(MAX) SELECT * FROM (SELECT Contact_ID, TB_Line, Deal_Balance, DATENAME(Month,[AsOfDate]) AS TheDate FROM [TBL_FR2052A_OperationalDepositTag_HIST] Where [AsOfDate] >= @startDate and [AsOfDate] <= @endDate) AS P PIVOT (SUM(DEAL_BALANCE) FOR TheDate in (January, February, March, April, May, June, July, August, September, October, November, December)) AS PV;

将传递到Excel并在Excel中创建一个小图表。我有工作代码示例,可以完成所有Excel的工作。我还不确定让用户创建Excel报告的最佳方法。我正在玩ListBox的想法,但也许有更好,更简单的方法来做到这一点。我在这里肯定愿意接受反馈!谢谢!

1 个答案:

答案 0 :(得分:2)

存储过程可能是外部化SQL的最佳方法,但它不会简化部署。外部化ad-hoc SQL不会为您带来任何性能,只应在您的设计真正需要它时使用。这是一个部署和安全问题。

在内部实现它的一种简单方法是创建一类共享函数,缓存并返回所需的每个SQL调用的命令对象。我只是将SQL保留在代码中。另请查看Command.Prepare函数。如果在循环中调用查询并且不能使用sprocs,它可以大大提高性能。