您的位置:首页 > 数据库

NO2:自动生成sql语句

2016-02-27 20:01 274 查看
SQL语句自动生成工具

大哉乾元 2016/2/26 作者原创转载请注明出处

前言

这个程序是几年前做成的,现在整理成文档和大家分享,当时参与的项目中大量使用的sql语句,所以SqL语句的代码输入占了较大的比例,为了提高sql语句的书写正确性和输入效率,做成了这个自动生成工具。

一:ADO.NET中执行sql文,对应的sql语句嵌入到vb.net的代码内,分析sql的语法格式个特点:

已检索语句为例分析:

A:必须是已select开头

B:检索的字段名(一些系统函数:可选,例如max,sum等)

C:必须要有From

D:表名,如果有多个表则会有表连接,连接格式:表1 left join(inner join,right join)表2 on 关联字段:表1:xxx =表2.xxx

E:检索条件(可选)where关键字

F:检索条件(可选)条件字段和传入的值或参数进行比较。

二:思路整理

A:想要获取检索字段,首先要获取字段所在的表名。

B:可以调用sql server或oracle提供的存储过程来获取当前连接权限内所有的表名,

C:通过一览选择的方式从一览中选择表名,

D:多表连接:可以使用两个一览来选择对应的两张表,连接方式比较固定常用的只有3中方式可以使用下拉框设选择设定,在使用两个一览分别选择对应表中的字段(通过系统提供的存储过程可以获取指定表中字段的信息),在使用一个输入框输入连个字段的对应关系。多次重复就可以实现多个表的两两关联。

E:将要检索的表保存到对应一览中。

F:检索字段的获取,在上步的一览众可以指定需要检索表的表名,更加表名获取表对应字段一览,将需要的字段选定,追加到指定一览保存,这样就获取到所有需要检索的表字段了。

G:检索条件和上一步的处理类似。

H:这样就得到了from中表的信息,select中字段的信息,where条件的信息,根据这些信息,拼凑成一个sql语句就很简单了。

I:将保存信息按照sql语句的语法结构拼凑成一个sql执行语句并附加上一些必要的信息,将这些保存到一个文件中,通过配置方法字段自动生成sql语句。搞定!!!

三:画面展示

Imports System.Data.SqlClient
Imports System.IO

Public Class Form1
'数据库表检索结果
Public dtTable As DataTable = New DataTable
'table表追加数据
Public dtFromTblData As DataTable = New DataTable
'检索字段追加数据
Private dtSelColData As DataTable = New DataTable
'条件字段追加数据
Private dtWhColData As DataTable = New DataTable

Private strConnectstring As String = ""

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
txtDBIp.Text = "192.168.5.14"
txtDBName.Text = "TNET_DB"
txtDBUser.Text = "sa"
txtDBPasswd.Text = "softroad@2013"

rdoInsert.Checked = True

cmbTabType.Items.Add("INNER JOIN")
cmbTabType.Items.Add("LEFT JOIN")
cmbTabType.Items.Add("RIGHT JOIN")

cmbTabType.Visible = False
cmbTabTo.Visible = False
cmbTabF1.Visible = False
cmbTabF2.Visible = False
cmbTabF3.Visible = False
cmbTabT1.Visible = False
cmbTabT2.Visible = False
cmbTabT3.Visible = False

'table from qu
dtFromTblData.Columns.Add("d1")
dtFromTblData.Columns.Add("d2")
dtFromTblData.Columns.Add("d3")
dtFromTblData.Columns.Add("d4")
dtFromTblData.Columns.Add("d5")
dtFromTblData.Columns.Add("d6")
dtFromTblData.Columns.Add("d7")
grdTabFrom.DataSource = dtFromTblData

'检索字段追加数据()
dtSelColData.Columns.Add("d1")
dtSelColData.Columns.Add("d2")
dtSelColData.Columns.Add("d3")
dtSelColData.Columns.Add("d4")
dtSelColData.Columns.Add("d5")
dtSelColData.Columns.Add("d6")
grdSelCol.DataSource = dtSelColData
selectDataClear()

'条件字段追加数据()
dtWhColData.Columns.Add("d1")
dtWhColData.Columns.Add("d2")
dtWhColData.Columns.Add("d3")
dtWhColData.Columns.Add("d4")
dtWhColData.Columns.Add("d5")
dtWhColData.Columns.Add("d6")
grdWhCol.DataSource = dtWhColData
WhereDataClear()
End Sub

Private Sub btnClose_Click(sender As Object, e As EventArgs) Handles btnClose.Click
Me.Close()
End Sub

Private Sub btnDBTest_Click(sender As Object, e As EventArgs) Handles btnDBTest.Click
'输入数据的check
If String.IsNullOrEmpty(txtDBIp.Text) = True Then
MessageBox.Show("请输入数据库主机ip地址")
Exit Sub
End If
If String.IsNullOrEmpty(txtDBName.Text) = True Then
MessageBox.Show("请输入数据库名称")
Exit Sub
End If
If String.IsNullOrEmpty(txtDBUser.Text) = True Then
MessageBox.Show("请输入用户名")
Exit Sub
End If
If String.IsNullOrEmpty(txtDBPasswd.Text) = True Then
MessageBox.Show("请输入密码")
Exit Sub
End If

strConnectstring = "Password=" & txtDBPasswd.Text & ";Persist Security Info=True;User ID=" & txtDBUser.Text & ";Initial Catalog=" & txtDBName.Text & ";Data Source=" & txtDBIp.Text

Dim conn As SqlConnection = Nothing
Try
conn = New SqlConnection(strConnectstring)
conn.Open()
If conn.State = ConnectionState.Open Then
MessageBox.Show("连接测试正常")
End If
Catch ex As Exception
MessageBox.Show("链接异常:" & ex.Message())
Finally
If conn IsNot Nothing Then
If conn.State = ConnectionState.Open Then
conn.Close()
End If
End If
End Try
End Sub

'初始化, 取得数据库表结构
Private Sub btnDBGetData_Click(sender As Object, e As EventArgs) Handles btnDBGetData.Click
'输入数据的check
If String.IsNullOrEmpty(txtDBIp.Text) = True Then
MessageBox.Show("请输入数据库主机ip地址")
Exit Sub
End If
If String.IsNullOrEmpty(txtDBName.Text) = True Then
MessageBox.Show("请输入数据库名称")
Exit Sub
End If
If String.IsNullOrEmpty(txtDBUser.Text) = True Then
MessageBox.Show("请输入用户名")
Exit Sub
End If
If String.IsNullOrEmpty(txtDBPasswd.Text) = True Then
MessageBox.Show("请输入密码")
Exit Sub
End If
Dim strsql As String = "select  c.name,cast(isnull(f.[value], '') as nvarchar(100)) as remark " _
& "from sys.objects c left join sys.extended_properties f on f.major_id=c.object_id and f.minor_id=0 and f.class=1 " _
& "where c.type='u' or c.type='v' order by name"

dtTable = SelsectDb(strsql)
setComBoxData()

MessageBox.Show("取得数据库表名成功,请在from区域选择需要处理的表")
End Sub

Private Sub cmbTabFrom_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbTabFrom.SelectedIndexChanged
GetTableData(1)
End Sub

Private Sub cmbTabTo_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbTabTo.SelectedIndexChanged
GetTableData(2)
End Sub

'表追加按钮
Private Sub btnAddTable_Click(sender As Object, e As EventArgs) Handles btnAddTable.Click
FromTableAdd()
End Sub

'设置字段
Private Sub btnSelClear_Click(sender As Object, e As EventArgs) Handles btnSelClear.Click
selectDataClear()
End Sub

Private Sub btnSelAdd_Click(sender As Object, e As EventArgs) Handles btnSelAdd.Click
selectAddData()
End Sub

Private Sub cmbSelTabName_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbSelTabName.SelectedIndexChanged
selectTabData()
End Sub

Private Sub cmbSelTabColName_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbSelTabColName.SelectedIndexChanged
selectTabColData()
End Sub

'设置wher条件

Private Sub btnWhClear_Click(sender As Object, e As EventArgs) Handles btnWhClear.Click
WhereDataClear()
End Sub

Private Sub btnWhAdd_Click(sender As Object, e As EventArgs) Handles btnWhAdd.Click
WhereAddData()
End Sub

Private Sub cmbWhTabName_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbWhTabName.SelectedIndexChanged
WhereTabData()
End Sub

Private Sub cmbWhTabColName_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbWhTabColName.SelectedIndexChanged
WhereTabColData()
End Sub

'画面清空
Private Sub btnclear_Click(sender As Object, e As EventArgs) Handles btnclear.Click

ClearAll()
End Sub

Private Sub rdoInsert_CheckedChanged(sender As Object, e As EventArgs) Handles rdoInsert.CheckedChanged
ClearAll()
End Sub

Private Sub rdoDelete_CheckedChanged(sender As Object, e As EventArgs) Handles rdoDelete.CheckedChanged
ClearAll()
End Sub

Private Sub rdoUpdate_CheckedChanged(sender As Object, e As EventArgs) Handles rdoUpdate.CheckedChanged
ClearAll()
End Sub

Private Sub rdoSelect_CheckedChanged(sender As Object, e As EventArgs) Handles rdoSelect.CheckedChanged
ClearAll()
End Sub

'sql文做成
Private Sub btnZuocheng_Click(sender As Object, e As EventArgs) Handles btnZuocheng.Click
sqlSourceSakusei()
End Sub

'处理函数

#Region "表连接设置"
'按照取得的表结构,初始画面显示表名的控件
Private Sub setComBoxData()
Dim dTabFrom As DataTable = Nothing
Dim dTabTo As DataTable = Nothing
dTabFrom = dtTable.Copy
dTabTo = dtTable.Copy
dTabFrom.Columns.Add("ID")
dTabTo.Columns.Add("ID")
dTabFrom.Columns.Add("SHOWNAME")
dTabTo.Columns.Add("SHOWNAME")
For irow = 0 To dtTable.Rows.Count - 1
dTabFrom.Rows(irow)("ID") = irow
dTabTo.Rows(irow)("ID") = irow

dTabFrom.Rows(irow)("SHOWNAME") = dtTable.Rows(irow)(0) & "   " & dtTable.Rows(irow)(1)
dTabTo.Rows(irow)("SHOWNAME") = dtTable.Rows(irow)(0) & "   " & dtTable.Rows(irow)(1)
Next

cmbTabFrom.ValueMember = "ID"
cmbTabFrom.DisplayMember = "SHOWNAME"
cmbTabFrom.DataSource = dTabFrom
cmbTabFrom.SelectedIndex = -1
cmbTabTo.ValueMember = "ID"
cmbTabTo.DisplayMember = "SHOWNAME"
cmbTabTo.DataSource = dTabTo
cmbTabTo.SelectedIndex = -1
End Sub

Private Sub GetTableData(ByVal mode As Integer)
Dim strTable As String
Dim dt As DataTable
Dim strTableName As String = ""

If mode = 1 Then
dt = cmbTabFrom.DataSource
strTable = cmbTabFrom.SelectedValue
If dt Is Nothing Or String.IsNullOrEmpty(strTable) = True Then
Exit Sub
End If
strTableName = dt.Rows(CInt(strTable))("name")
ElseIf mode = 2 Then

dt = cmbTabTo.DataSource
strTable = cmbTabTo.SelectedValue
If dt Is Nothing Or String.IsNullOrEmpty(strTable) = True Then
Exit Sub
End If
strTableName = dt.Rows(CInt(strTable))("name")
End If

Dim strsql As String = ""

strsql = strsql & "select a.name, a.max_length as len , a.precision , a.scale ,  "
strsql = strsql & "cast(isnull(e.[value],'') as nvarchar(100)) as remark, f.name as typename,"
strsql = strsql & " a.column_id -1 as ID, a.name + '   ' + cast(isnull(e.[value],'') as nvarchar(100)) as SHOWNAME "
strsql = strsql & " from  sys.columns a inner join sys.objects c on a.object_id=c.object_id and ( c.type='u' or c.type='v') "
strsql = strsql & " left join sys.extended_properties e on e.major_id=c.object_id "
strsql = strsql & " and e.minor_id=a.column_id and e.class=1 "
strsql = strsql & " left join sys.types f on f.system_type_id= a.system_type_id  "
strsql = strsql & " where c.name='" & strTableName & "'"
strsql = strsql & " order by ID"

Dim dtcol As DataTable
dtcol = SelsectDb(strsql)

If mode = 1 Then
Dim dt1 As DataTable
Dim dt2 As DataTable
Dim dt3 As DataTable

dt1 = dtcol.Copy
cmbTabF1.ValueMember = "ID"
cmbTabF1.DisplayMember = "SHOWNAME"
cmbTabF1.DataSource = dt1
cmbTabF1.SelectedIndex = -1

dt2 = dtcol.Copy
cmbTabF2.ValueMember = "ID"
cmbTabF2.DisplayMember = "SHOWNAME"
cmbTabF2.DataSource = dt2
cmbTabF2.SelectedIndex = -1

dt3 = dtcol.Copy
cmbTabF3.ValueMember = "ID"
cmbTabF3.DisplayMember = "SHOWNAME"
cmbTabF3.DataSource = dt3
cmbTabF3.SelectedIndex = -1
ElseIf mode = 2 Then

Dim dt1 As DataTable
Dim dt2 As DataTable
Dim dt3 As DataTable

dt1 = dtcol.Copy
cmbTabT1.ValueMember = "ID"
cmbTabT1.DisplayMember = "SHOWNAME"
cmbTabT1.DataSource = dt1
cmbTabT1.SelectedIndex = -1

dt2 = dtcol.Copy
cmbTabT2.ValueMember = "ID"
cmbTabT2.DisplayMember = "SHOWNAME"
cmbTabT2.DataSource = dt2
cmbTabT2.SelectedIndex = -1

dt3 = dtcol.Copy
cmbTabT3.ValueMember = "ID"
cmbTabT3.DisplayMember = "SHOWNAME"
cmbTabT3.DataSource = dt3
cmbTabT3.SelectedIndex = -1
End If
End Sub

'追加选择的表和表连接关系
Private Sub FromTableAdd()
Dim dt As DataTable = New DataTable()
If dtFromTblData.Rows.Count <= 0 Then
If cmbTabFrom.SelectedIndex < 0 Then
MessageBox.Show("请选择表F项,指定操作的表")
Exit Sub
Else
Dim dr As DataRow = dtFromTblData.NewRow
dt = cmbTabFrom.DataSource
dr("d1") = "主表"
dr("d2") = dt.Rows(CInt(cmbTabFrom.SelectedValue))("name")
dr("d4") = dt.Rows(CInt(cmbTabFrom.SelectedValue))("remark")
dtFromTblData.Rows.Add(dr)

dt.Clear()
For i As Integer = 0 To dtFromTblData.Rows.Count - 1
Dim strFromTabName As String
strFromTabName = dtFromTblData.Rows(i)("d2")

For j As Integer = 0 To dtTable.Rows.Count - 1
Dim strToTabName = dtTable.Rows(j)("Name")
If strFromTabName = strToTabName Then
Dim dr1 As DataRow = dt.NewRow
dr1("name") = strFromTabName
dr1("remark") = dtTable.Rows(j)("remark")
dr1("ID") = i.ToString()
dr1("SHOWNAME") = dtTable.Rows(j)(0) & "   " & dtTable.Rows(j)(1)
dt.Rows.Add(dr1)
End If

Next
Next
cmbTabFrom.SelectedIndex = -1

Dim dtSelTab As DataTable
dtSelTab = cmbTabFrom.DataSource.copy()

cmbSelTabName.ValueMember = "ID"
cmbSelTabName.DisplayMember = "SHOWNAME"
cmbSelTabName.DataSource = dtSelTab
cmbSelTabName.SelectedIndex = -1

Dim dtWhTab As DataTable
dtWhTab = cmbTabFrom.DataSource.copy()

cmbWhTabName.ValueMember = "ID"
cmbWhTabName.DisplayMember = "SHOWNAME"
cmbWhTabName.DataSource = dtWhTab
cmbWhTabName.SelectedIndex = -1

If rdoSelect.Checked = True Then
cmbTabType.Visible = True
cmbTabTo.Visible = True
cmbTabF1.Visible = True
cmbTabF2.Visible = True
cmbTabF3.Visible = True
cmbTabT1.Visible = True
cmbTabT2.Visible = True
cmbTabT3.Visible = True
End If
End If
Else
If rdoDelete.Checked = True Or rdoInsert.Checked = True Or rdoUpdate.Checked = True Then
MessageBox.Show("插入,删除,更新操作只能选择一个表")
Exit Sub
Else

If cmbTabType.SelectedIndex < 0 Then
MessageBox.Show("请选择表连接的类型")
Exit Sub
End If

If cmbTabFrom.SelectedIndex < 0 Then
MessageBox.Show("请选择连接的主表")
Exit Sub
End If

If cmbTabTo.SelectedIndex < 0 Then
MessageBox.Show("请选择连接的子表")
Exit Sub
End If

If (cmbTabF1.SelectedIndex < 0 And _
cmbTabF2.SelectedIndex < 0 And _
cmbTabF3.SelectedIndex < 0 And _
cmbTabT1.SelectedIndex < 0 And _
cmbTabT2.SelectedIndex < 0 And _
cmbTabT3.SelectedIndex < 0) Then
MessageBox.Show("请选择连接的字段对应关系,最多选择3组")
Exit Sub
End If

If (cmbTabF1.SelectedIndex < 0 And _
cmbTabT1.SelectedIndex > 0) Or _
(cmbTabF1.SelectedIndex > 0 And _
cmbTabT1.SelectedIndex < 0) Then
MessageBox.Show("请选择正确选择第一组的连接关系")
Exit Sub
End If

If (cmbTabF2.SelectedIndex < 0 And _
cmbTabT2.SelectedIndex > 0) Or _
(cmbTabF2.SelectedIndex > 0 And _
cmbTabT2.SelectedIndex < 0) Then
MessageBox.Show("请选择正确选择第二组的连接关系")
Exit Sub
End If

If (cmbTabF3.SelectedIndex < 0 And _
cmbTabT3.SelectedIndex > 0) Or _
(cmbTabF3.SelectedIndex > 0 And _
cmbTabT3.SelectedIndex < 0) Then
MessageBox.Show("请选择正确选择第三组的连接关系")
Exit Sub
End If

Dim dr As DataRow = dtFromTblData.NewRow
Dim strFromTabName As String
Dim strToTabName As String
Dim strTemp As String

dr("d1") = cmbTabType.Text
strFromTabName = cmbTabFrom.DataSource.Rows(CInt(cmbTabFrom.SelectedValue))("name")
dr("d2") = strFromTabName
strToTabName = cmbTabTo.DataSource.Rows(CInt(cmbTabTo.SelectedValue))("name")
dr("d3") = strToTabName
dr("d4") = cmbTabTo.DataSource.Rows(CInt(cmbTabTo.SelectedValue))("remark")
If cmbTabF1.SelectedIndex >= 0 Then
strTemp = strFromTabName & "." & cmbTabF1.DataSource.rows(CInt(cmbTabF1.SelectedIndex))("name") & " = "
strTemp = strTemp & strToTabName & "." & cmbTabT1.DataSource.rows(CInt(cmbTabT1.SelectedIndex))("name")
dr("d5") = strTemp
End If

If cmbTabF2.SelectedIndex >= 0 Then
strTemp = strFromTabName & "." & cmbTabF2.DataSource.rows(CInt(cmbTabF2.SelectedIndex))("name") & " = "
strTemp = strTemp & strToTabName & "." & cmbTabT2.DataSource.rows(CInt(cmbTabT2.SelectedIndex))("name")
dr("d6") = strTemp
End If
If cmbTabF3.SelectedIndex >= 0 Then
strTemp = strFromTabName & "." & cmbTabF3.DataSource.rows(CInt(cmbTabF3.SelectedIndex))("name") & " = "
strTemp = strTemp & strToTabName & "." & cmbTabT3.DataSource.rows(CInt(cmbTabT3.SelectedIndex))("name")
dr("d7") = strTemp
End If

dtFromTblData.Rows.Add(dr)

dt = cmbTabFrom.DataSource
dt.Clear()
For i As Integer = 0 To dtFromTblData.Rows.Count - 1
Dim strFromTabName1 As String
If i = 0 Then
strFromTabName1 = dtFromTblData.Rows(i)("d2")
Else
strFromTabName1 = dtFromTblData.Rows(i)("d3")
End If
For j As Integer = 0 To dtTable.Rows.Count - 1
Dim strToTabName1 = dtTable.Rows(j)("Name")
If strFromTabName1 = strToTabName1 Then
Dim dr1 As DataRow = dt.NewRow
dr1("name") = strFromTabName1
dr1("remark") = dtTable.Rows(j)("remark")
dr1("ID") = i.ToString()
dr1("SHOWNAME") = dtTable.Rows(j)(0) & "   " & dtTable.Rows(j)(1)
dt.Rows.Add(dr1)
End If

Next
Next

cmbTabType.SelectedIndex = -1
cmbTabFrom.SelectedIndex = -1
cmbTabTo.SelectedIndex = -1

cmbTabF1.SelectedIndex = -1
cmbTabF2.SelectedIndex = -1
cmbTabF3.SelectedIndex = -1
cmbTabT1.SelectedIndex = -1
cmbTabT2.SelectedIndex = -1
cmbTabT3.SelectedIndex = -1

Dim dtSelTab As DataTable
dtSelTab = cmbTabFrom.DataSource.copy()

cmbSelTabName.ValueMember = "ID"
cmbSelTabName.DisplayMember = "SHOWNAME"
cmbSelTabName.DataSource = dtSelTab
cmbSelTabName.SelectedIndex = -1

cmbSelTabColName.SelectedIndex = -1
txtSelColType.Text = ""
txtSelColLen1.Text = ""
txtSelColLen2.Text = ""
txtSelColParmant.Text = ""

Dim dtWhTab As DataTable
dtWhTab = cmbTabFrom.DataSource.copy()

cmbWhTabName.ValueMember = "ID"
cmbWhTabName.DisplayMember = "SHOWNAME"
cmbWhTabName.DataSource = dtWhTab
cmbWhTabName.SelectedIndex = -1

txtWhColType.Text = ""
txtWhColLen1.Text = ""
txtWhColLen2.Text = ""
txtWhColParmant.Text = ""
End If
End If
End Sub

#End Region

#Region "字段设置"

'清空
Private Sub selectDataClear()
Dim dtsel As DataTable
dtsel = grdSelCol.DataSource
If dtsel IsNot Nothing Then
dtsel.Clear()
End If
dtsel = cmbSelTabName.DataSource
If dtsel IsNot Nothing Then
dtsel.Clear()
For i As Integer = 0 To dtFromTblData.Rows.Count - 1
Dim strFromTabName1 As String
If i = 0 Then
strFromTabName1 = dtFromTblData.Rows(i)("d2")
Else
strFromTabName1 = dtFromTblData.Rows(i)("d3")
End If
For j As Integer = 0 To dtTable.Rows.Count - 1
Dim strToTabName1 = dtTable.Rows(j)("Name")
If strFromTabName1 = strToTabName1 Then
Dim dr1 As DataRow = dtsel.NewRow
dr1("name") = strFromTabName1
dr1("remark") = dtTable.Rows(j)("remark")
dr1("ID") = i.ToString()
dr1("SHOWNAME") = dtTable.Rows(j)(0) & "   " & dtTable.Rows(j)(1)
dtsel.Rows.Add(dr1)
End If

Next
Next

End If
cmbSelTabName.SelectedIndex = -1
dtsel = cmbSelTabColName.DataSource
If dtsel IsNot Nothing Then
dtsel.Clear()

End If
txtSelColType.Text = ""
txtSelColLen1.Text = ""
txtSelColLen2.Text = ""
txtSelColParmant.Text = ""
End Sub

'选择表
Private Sub selectTabData()
Dim strTable As String
Dim dt As DataTable
Dim strTableName As String = ""

dt = cmbSelTabName.DataSource
strTable = cmbSelTabName.SelectedValue
If dt Is Nothing Or String.IsNullOrEmpty(strTable) = True Then
Exit Sub
End If
strTableName = dt.Rows(CInt(strTable))("name")

Dim strsql As String = ""

strsql = strsql & "select a.name, a.max_length as len , a.precision , a.scale ,  "
strsql = strsql & "cast(isnull(e.[value],'') as nvarchar(100)) as remark, f.name as typename,"
strsql = strsql & " a.column_id -1 as ID, a.name + '   ' + cast(isnull(e.[value],'') as nvarchar(100)) as SHOWNAME "
strsql = strsql & " from  sys.columns a inner join sys.objects c on a.object_id=c.object_id and ( c.type='u' or c.type='v') "
strsql = strsql & " left join sys.extended_properties e on e.major_id=c.object_id "
strsql = strsql & " and e.minor_id=a.column_id and e.class=1 "
strsql = strsql & " left join sys.types f on f.system_type_id= a.system_type_id  "
strsql = strsql & " where c.name='" & strTableName & "'"
strsql = strsql & " order by ID"

Dim dtcol As DataTable
dtcol = SelsectDb(strsql)

Dim dt1 As DataTable

dt1 = dtcol.Copy
cmbSelTabColName.ValueMember = "ID"
cmbSelTabColName.DisplayMember = "SHOWNAME"
cmbSelTabColName.DataSource = dt1
cmbSelTabColName.SelectedIndex = -1

txtSelColType.Text = ""
txtSelColLen1.Text = ""
txtSelColLen2.Text = ""
txtSelColParmant.Text = ""
End Sub

'选择表字段
Private Sub selectTabColData()
Dim dtcol As DataTable
dtcol = cmbSelTabColName.DataSource
If dtcol Is Nothing Then
Exit Sub
End If
Dim iIndex As Integer
If cmbSelTabColName.SelectedIndex < 0 Then
Exit Sub
End If

iIndex = CInt(cmbSelTabColName.SelectedIndex)
Dim strType As String = dtcol.Rows(iIndex)("typename")

txtSelColType.Text = strType
strType = strType.ToUpper()
If strType = "numeric".ToUpper() Then
txtSelColLen1.Text = dtcol.Rows(iIndex)("precision")
txtSelColLen2.Text = dtcol.Rows(iIndex)("scale")
ElseIf strType = "datetime".ToUpper() Then
txtSelColLen1.Text = ""
txtSelColLen2.Text = ""
Else
txtSelColLen1.Text = dtcol.Rows(iIndex)("len")
txtSelColLen2.Text = ""
End If
End Sub

'增加检索字段
Private Sub selectAddData()
If rdoDelete.Checked = True Then
MessageBox.Show("删除数据时,不需要设定字段")
Exit Sub
End If

If cmbSelTabName.SelectedIndex < 0 Then
MessageBox.Show("请选择检索处理的表")
Exit Sub
End If

If cmbSelTabColName.SelectedIndex < 0 Then
MessageBox.Show("请选择检索处理的字段")
Exit Sub
End If

If (rdoInsert.Checked = True Or rdoUpdate.Checked = True) And chkSelCol.Checked = True Then
txtSelColParmant.Text = cmbSelTabColName.DataSource.rows(CInt(cmbSelTabColName.SelectedValue))("name")
If txtSelColParmant.Text.Substring(0, 1) <> "@" Then
txtSelColParmant.Text = "@" & txtSelColParmant.Text
End If
End If

If (rdoInsert.Checked = True Or rdoUpdate.Checked = True) And chkSelCol.Checked = False Then
If txtSelColParmant.Text = "" Then
If MsgBox("没有输入字段的参数变量,如果不设置参数,默认使用变量名作为参数 " & vbCrLf & "是否登录该字段", MsgBoxStyle.YesNo, ) = MsgBoxResult.No Then
Exit Sub
Else
txtSelColParmant.Text = cmbSelTabColName.DataSource.rows(CInt(cmbSelTabColName.SelectedValue))("name")
End If
End If
If txtSelColParmant.Text.Substring(0, 1) <> "@" Then
txtSelColParmant.Text = "@" & txtSelColParmant.Text
End If
End If

Dim mode As Boolean = False
Dim index As Integer
Dim strSelTabName As String
Dim strSelTabColName As String

Dim dtGrid As DataTable
dtGrid = grdSelCol.DataSource

strSelTabName = cmbSelTabName.DataSource.rows(CInt(cmbSelTabName.SelectedValue))("name")
strSelTabColName = cmbSelTabColName.DataSource.rows(CInt(cmbSelTabColName.SelectedValue))("name")

For index = 0 To grdSelCol.Rows.Count - 1
If dtGrid.Rows(index)("d1") = strSelTabName And dtGrid.Rows(index)("d2") = strSelTabColName Then
mode = True
Exit For
End If
Next

If mode = True Then
dtGrid.Rows(index)("d3") = cmbSelTabColName.DataSource.rows(CInt(cmbSelTabColName.SelectedValue))("remark")
dtGrid.Rows(index)("d4") = txtSelColType.Text
dtGrid.Rows(index)("d5") = txtSelColLen1.Text
dtGrid.Rows(index)("d6") = txtSelColParmant.Text
Else
Dim dr As DataRow = dtGrid.NewRow
dr("d1") = strSelTabName
dr("d2") = strSelTabColName
dr("d3") = cmbSelTabColName.DataSource.rows(CInt(cmbSelTabColName.SelectedValue))("remark")
dr("d4") = txtSelColType.Text
dr("d5") = txtSelColLen1.Text
dr("d6") = txtSelColParmant.Text
dtGrid.Rows.Add(dr)
End If
txtSelColParmant.Text = ""
End Sub
#End Region

#Region "where 条件字段设置"

'清空
Private Sub WhereDataClear()
Dim dtWh As DataTable
dtWh = grdWhCol.DataSource
If dtWh IsNot Nothing Then
dtWh.Clear()
End If
dtWh = cmbWhTabName.DataSource
If dtWh IsNot Nothing Then
dtWh.Clear()
For i As Integer = 0 To dtFromTblData.Rows.Count - 1
Dim strFromTabName1 As String
If i = 0 Then
strFromTabName1 = dtFromTblData.Rows(i)("d2")
Else
strFromTabName1 = dtFromTblData.Rows(i)("d3")
End If
For j As Integer = 0 To dtTable.Rows.Count - 1
Dim strToTabName1 = dtTable.Rows(j)("Name")
If strFromTabName1 = strToTabName1 Then
Dim dr1 As DataRow = dtWh.NewRow
dr1("name") = strFromTabName1
dr1("remark") = dtTable.Rows(j)("remark")
dr1("ID") = i.ToString()
dr1("SHOWNAME") = dtTable.Rows(j)(0) & "   " & dtTable.Rows(j)(1)
dtWh.Rows.Add(dr1)
End If

Next
Next

End If
cmbWhTabName.SelectedIndex = -1
dtWh = cmbWhTabColName.DataSource
If dtWh IsNot Nothing Then
dtWh.Clear()

End If
txtWhColType.Text = ""
txtWhColLen1.Text = ""
txtWhColLen2.Text = ""
txtWhColParmant.Text = ""
End Sub

'选择表
Private Sub WhereTabData()
Dim strTable As String
Dim dt As DataTable
Dim strTableName As String = ""

dt = cmbWhTabName.DataSource
strTable = cmbWhTabName.SelectedValue
If dt Is Nothing Or String.IsNullOrEmpty(strTable) = True Then
Exit Sub
End If
strTableName = dt.Rows(CInt(strTable))("name")

Dim strsql As String = ""

strsql = strsql & "select a.name, a.max_length as len , a.precision , a.scale ,  "
strsql = strsql & "cast(isnull(e.[value],'') as nvarchar(100)) as remark, f.name as typename,"
strsql = strsql & " a.column_id -1 as ID, a.name + '   ' + cast(isnull(e.[value],'') as nvarchar(100)) as SHOWNAME "
strsql = strsql & " from  sys.columns a inner join sys.objects c on a.object_id=c.object_id and ( c.type='u' or c.type='v') "
strsql = strsql & " left join sys.extended_properties e on e.major_id=c.object_id "
strsql = strsql & " and e.minor_id=a.column_id and e.class=1 "
strsql = strsql & " left join sys.types f on f.system_type_id= a.system_type_id  "
strsql = strsql & " where c.name='" & strTableName & "'"
strsql = strsql & " order by ID"

Dim dtcol As DataTable
dtcol = SelsectDb(strsql)

Dim dt1 As DataTable

dt1 = dtcol.Copy
cmbWhTabColName.ValueMember = "ID"
cmbWhTabColName.DisplayMember = "SHOWNAME"
cmbWhTabColName.DataSource = dt1
cmbWhTabColName.SelectedIndex = -1

txtWhColType.Text = ""
txtWhColLen1.Text = ""
txtWhColLen2.Text = ""
txtWhColParmant.Text = ""
End Sub

'选择表字段
Private Sub WhereTabColData()
Dim dtcol As DataTable
dtcol = cmbWhTabColName.DataSource
If dtcol Is Nothing Then
Exit Sub
End If
Dim iIndex As Integer
If cmbWhTabColName.SelectedIndex < 0 Then
Exit Sub
End If

iIndex = CInt(cmbWhTabColName.SelectedValue)
Dim strType As String = dtcol.Rows(iIndex)("typename")

txtWhColType.Text = strType
strType = strType.ToUpper()
If strType = "numeric".ToUpper() Then
txtWhColLen1.Text = dtcol.Rows(iIndex)("precision")
txtWhColLen2.Text = dtcol.Rows(iIndex)("scale")
ElseIf strType = "datetime".ToUpper() Then
txtWhColLen1.Text = ""
txtWhColLen2.Text = ""
Else
txtWhColLen1.Text = dtcol.Rows(iIndex)("len")
txtWhColLen2.Text = ""
End If
End Sub

'增加检索字段
Private Sub WhereAddData()
If rdoInsert.Checked = True Then
MessageBox.Show("登录数据时,不需要条件字段")
Exit Sub
End If

If cmbWhTabName.SelectedIndex < 0 Then
MessageBox.Show("请选择条件处理的表")
Exit Sub
End If

If cmbWhTabColName.SelectedIndex < 0 Then
MessageBox.Show("请选择条件处理的字段")
Exit Sub
End If

If txtWhColParmant.Text = "" And chkWhCol.Checked = True Then
txtWhColParmant.Text = cmbWhTabColName.DataSource.rows(CInt(cmbWhTabColName.SelectedValue))("name")
End If

If txtWhColParmant.Text = "" And chkWhCol.Checked = False Then
If MsgBox("没有输入字段的参数变量,如果不设置参数,默认使用变量名作为参数 " & vbCrLf & "是否登录该字段", MsgBoxStyle.YesNo, ) = MsgBoxResult.No Then
Exit Sub
Else
txtWhColParmant.Text = cmbWhTabColName.DataSource.rows(CInt(cmbWhTabColName.SelectedValue))("name")
End If
End If
If txtWhColParmant.Text.Substring(0, 1) <> "@" Then
txtWhColParmant.Text = "@W_" & txtWhColParmant.Text
End If

Dim mode As Boolean = False
Dim index As Integer
Dim strWhTabName As String
Dim strWhTabColName As String

Dim dtGrid As DataTable
dtGrid = grdWhCol.DataSource

strWhTabName = cmbWhTabName.DataSource.rows(CInt(cmbWhTabName.SelectedValue))("name")
strWhTabColName = cmbWhTabColName.DataSource.rows(CInt(cmbWhTabColName.SelectedValue))("name")

For index = 0 To grdWhCol.Rows.Count - 1
If dtGrid.Rows(index)("d1") = strWhTabName And dtGrid.Rows(index)("d2") = strWhTabColName Then
mode = True
Exit For
End If
Next

If mode = True Then
dtGrid.Rows(index)("d3") = cmbWhTabColName.DataSource.rows(CInt(cmbWhTabColName.SelectedValue))("remark")
dtGrid.Rows(index)("d4") = txtWhColType.Text
dtGrid.Rows(index)("d5") = txtWhColLen1.Text
dtGrid.Rows(index)("d6") = txtWhColParmant.Text
Else
Dim dr As DataRow = dtGrid.NewRow
dr("d1") = strWhTabName
dr("d2") = strWhTabColName
dr("d3") = cmbWhTabColName.DataSource.rows(CInt(cmbWhTabColName.SelectedValue))("remark")
dr("d4") = txtWhColType.Text
dr("d5") = txtWhColLen1.Text
dr("d6") = txtWhColParmant.Text
dtGrid.Rows.Add(dr)
End If
txtWhColParmant.Text = ""
End Sub
#End Region

#Region "整体按钮"
'清空
Private Sub ClearAll()

cmbTabType.Visible = False
cmbTabTo.Visible = False
cmbTabF1.Visible = False
cmbTabF2.Visible = False
cmbTabF3.Visible = False
cmbTabT1.Visible = False
cmbTabT2.Visible = False
cmbTabT3.Visible = False

Dim dTabFrom As DataTable = Nothing
dTabFrom = dtTable.Copy
dTabFrom.Columns.Add("ID")
dTabFrom.Columns.Add("SHOWNAME")
For irow = 0 To dtTable.Rows.Count - 1
dTabFrom.Rows(irow)("ID") = irow

dTabFrom.Rows(irow)("SHOWNAME") = dtTable.Rows(irow)(0) & "   " & dtTable.Rows(irow)(1)
Next

cmbTabFrom.ValueMember = "ID"
cmbTabFrom.DisplayMember = "SHOWNAME"
cmbTabFrom.DataSource = dTabFrom
cmbTabFrom.SelectedIndex = -1

cmbTabType.SelectedIndex = -1
cmbTabFrom.SelectedIndex = -1
cmbTabTo.SelectedIndex = -1
cmbTabF1.SelectedIndex = -1
cmbTabF2.SelectedIndex = -1
cmbTabF3.SelectedIndex = -1
cmbTabT1.SelectedIndex = -1
cmbTabT2.SelectedIndex = -1
cmbTabT3.SelectedIndex = -1
Dim dtFrom As DataTable
dtFrom = grdTabFrom.DataSource
If dtFrom IsNot Nothing Then
dtFrom.Clear()
End If

selectDataClear()
WhereDataClear()
End Sub

Private intParmat As Integer = 0
Private strParmat As String
Private strParmatValue As String

'sql文做成
Private Sub sqlSourceSakusei()
If grdTabFrom.Rows.Count <= 0 Then
MessageBox.Show("请选择处理的from的表对象")
Exit Sub
End If

If rdoDelete.Checked = False Then
If grdSelCol.Rows.Count <= 0 Then
MessageBox.Show("请选择检索处理的字段")
Exit Sub
End If
End If

Dim strSelString As String = ""
Dim strFromString As String = ""
Dim strWhereString As String = ""
Dim strTemp As String

Dim strSql As String = ""
Dim strParmat1 As String = ""

intParmat = 0
strParmat = ""
strParmatValue = ""

strSelString = strSelectSql()
strFromString = strFromSql()
strWhereString = strWhSql()

If intParmat > 0 Then

strParmat1 = "        'パラメーターの設定" & vbCrLf
strParmat1 = strParmat1 & "        Dim paras() As SqlParameter = New SqlParameter(" & intParmat - 1 & ") {}" & vbCrLf
strParmat1 = strParmat1 & strParmat & vbCrLf
strParmat1 = strParmat1 & strParmatValue & vbCrLf
End If

strSql = ""
strSql = strSql & "        'SQL文の設定" & vbCrLf
strSql = strSql & "        Dim strSql As StringBuilder = New StringBuilder()" & vbCrLf & vbCrLf

If rdoInsert.Checked = True Or rdoDelete.Checked = True Or rdoUpdate.Checked = True Then
strSql = strSql & strFromString
strSql = strSql & strSelString
strSql = strSql & strWhereString

strSql = strSql & vbCrLf & strParmat1
Else
strSql = strSql & strSelString
strSql = strSql & strFromString
strSql = strSql & strWhereString

strSql = strSql & vbCrLf & strParmat1
End If

'ログパラメーター
If rdoDelete.Checked = True Or rdoUpdate.Checked = True Or rdoInsert.Checked = True Then
strTemp = ""
strTemp = strTemp & "        'ログパラメーター " & vbCrLf
strTemp = strTemp & "        Dim strProgromId As String" & vbCrLf
strTemp = strTemp & "        Dim strTypeAction As String" & vbCrLf
strTemp = strTemp & "        Dim strTabNa As String" & vbCrLf
strTemp = strTemp & "        Dim strTblKey As String" & vbCrLf
strTemp = strTemp & "        Dim strReseve As String" & vbCrLf
strTemp = strTemp & "" & vbCrLf
strTemp = strTemp & "        'プログラムID" & vbCrLf
strTemp = strTemp & "        strProgromId = ""TNETMST002_SEL""" & vbCrLf
strTemp = strTemp & "" & vbCrLf
strTemp = strTemp & "        '操作" & vbCrLf
strTemp = strTemp & "        strTypeAction = ""UPDATE""" & vbCrLf
strTemp = strTemp & "" & vbCrLf
strTemp = strTemp & "        '対象テーブル" & vbCrLf
strTemp = strTemp & "        strTabNa = ""SHIP_MST""" & vbCrLf
strTemp = strTemp & "" & vbCrLf
strTemp = strTemp & "        'キー項目" & vbCrLf
strTemp = strTemp & "        strTblKey = ""SHIP_CD:"" & tnetmst002SelMod.ShipCd & "";APP_START_DATE:"" & tnetmst002SelMod.AppStartDate" & vbCrLf
strTemp = strTemp & "" & vbCrLf
strTemp = strTemp & "        '予備" & vbCrLf
strTemp = strTemp & "        strReseve = """ & vbCrLf
strTemp = strTemp & "" & vbCrLf
strTemp = strTemp & "        Dim parasLog() As SqlParameter = New SqlParameter(5) {}" & vbCrLf
strTemp = strTemp & "        parasLog(0) = New SqlParameter(""@UserId"", SqlDbType.Char, 6)" & vbCrLf
strTemp = strTemp & "        parasLog(0).Value = SessionUtil.SESSION_PCHARGE_CD & "" '担当者コード" & vbCrLf
strTemp = strTemp & "        parasLog(1) = New SqlParameter(""@ProgromId"", SqlDbType.VarChar, 20)" & vbCrLf
strTemp = strTemp & "        parasLog(1).Value = strProgromId " & vbCrLf
strTemp = strTemp & "        parasLog(2) = New SqlParameter(""@TypeAction"", SqlDbType.Char, 6) " & vbCrLf
strTemp = strTemp & "        parasLog(2).Value = strTypeAction" & vbCrLf
strTemp = strTemp & "        parasLog(3) = New SqlParameter(""@TabNa"", SqlDbType.VarChar, 20)" & vbCrLf
strTemp = strTemp & "        parasLog(3).Value = strTabNa" & vbCrLf
strTemp = strTemp & "        parasLog(4) = New SqlParameter(""@TblKey"", SqlDbType.VarChar, 200)" & vbCrLf
strTemp = strTemp & "        parasLog(4).Value = strTblKey" & vbCrLf
strTemp = strTemp & "        parasLog(5) = New SqlParameter(""@Reseve"", SqlDbType.VarChar, 200)" & vbCrLf
strTemp = strTemp & "        parasLog(5).Value = strReseve" & vbCrLf

strSql = strSql & vbCrLf & strTemp
End If

'db检索
If rdoSelect.Checked = True Then
strSql = strSql & "" & vbCrLf
strSql = strSql & "        Try" & vbCrLf
strSql = strSql & "            Return Me.ExecuteDataTable(CommandType.Text, strSql.ToString, paras)" & vbCrLf
strSql = strSql & "        Catch ex As SqlException" & vbCrLf
strSql = strSql & "            Throw New DaoAccessException(ex)" & vbCrLf
strSql = strSql & "        End Try" & vbCrLf
Else

strSql = strSql & "" & vbCrLf
strSql = strSql & "        Try" & vbCrLf
If rdoInsert.Checked = True Then
strSql = strSql & "            Return Me.ExecuteNonQuery(CommandType.Text, strSql.ToString, paras, nothing, parasLog)" & vbCrLf
Else
strSql = strSql & "            Return Me.ExecuteNonQuery(CommandType.Text, strSql.ToString, paras, tnetmst001Mod.HaitaDateTime, parasLog)" & vbCrLf
End If
strSql = strSql & "        Catch ex As SqlException" & vbCrLf
strSql = strSql & "            Throw New DaoAccessException(ex)" & vbCrLf
strSql = strSql & "        End Try" & vbCrLf
End If

strTemp = "" & vbCrLf & vbCrLf & vbCrLf & vbCrLf & vbCrLf
strTemp = strTemp & "'***************************************************************************" & vbCrLf
strTemp = strTemp & "'" & Now.ToString() & vbCrLf & vbCrLf & vbCrLf

strSql = strTemp & strSql

Dim strfile As String
strfile = "Vb_Sql_Source" & Now.ToString("yyyyMMdd") & ".vb"
If System.IO.File.Exists(strfile) = False Then
System.IO.File.WriteAllText(strfile, strSql)
Else
System.IO.File.AppendAllText(strfile, strSql)
End If

MessageBox.Show("vb的sql source生成成功,source存放当前目录下的:【" & strfile & "】文件中。")
End Sub

Private Function strSelectSql() As String
Dim strSelString As String = ""
Dim strInsValue As String = ""

Dim strTemp As String
Dim strTValue As String

Dim strTab As String
Dim strCol As String
Dim strCom As String
Dim strType As String
Dim strLen As String
Dim strASName As String

'删除
If rdoDelete.Checked = True Then
Return ""
End If

'检索
If rdoSelect.Checked = True Then
strSelString = ""

Dim dtSel As DataTable
dtSel = grdSelCol.DataSource
For index As Integer = 0 To dtSel.Rows.Count - 1
strTab = dtSel.Rows(index)("d1")
strCol = dtSel.Rows(index)("d2")
strCom = dtSel.Rows(index)("d3")
strType = dtSel.Rows(index)("d4")
strLen = dtSel.Rows(index)("d5")
strASName = dtSel.Rows(index)("d6")

If index <= 0 Then
strTemp = "        strSql.Append("" SELECT "")" & vbCrLf
Else
strTemp = ""
End If

strTemp = strTemp & "        strSql.Append(""   "
If index > 0 Then
strTemp = strTemp & ", "
End If

If strType.ToUpper = "char".ToUpper() Then
If grdTabFrom.Rows.Count > 1 Then
strTemp = strTemp & "RTRIM(" & strTab & "." & strCol & ")"
Else
strTemp = strTemp & "RTRIM(" & strCol & ")"
End If
If String.IsNullOrEmpty(strASName) = False Then
strTemp = strTemp & " AS " & strASName
Else
strTemp = strTemp & " AS " & strCol
End If
Else
If grdTabFrom.Rows.Count > 1 Then
strTemp = strTemp & strTab & "." & strCol
Else
strTemp = strTemp & "." & strCol
End If

If String.IsNullOrEmpty(strASName) = False Then
strTemp = strTemp & " AS " & strASName
End If
End If

If String.IsNullOrEmpty(strASName) = False Then
strTemp = strTemp & " AS " & strASName
End If

strTemp = strTemp & " "")"

If String.IsNullOrEmpty(strCom) = False Then
strTemp = strTemp & " '" & strCom
End If
strSelString = strSelString & strTemp & vbCrLf
Next

Return strSelString
End If

'更新
If rdoUpdate.Checked = True Then
strSelString = ""

Dim dtSel As DataTable
dtSel = grdSelCol.DataSource
For index As Integer = 0 To dtSel.Rows.Count - 1
strTab = dtSel.Rows(index)("d1")
strCol = dtSel.Rows(index)("d2")
strCom = dtSel.Rows(index)("d3")
strType = dtSel.Rows(index)("d4")
strLen = dtSel.Rows(index)("d5")
strASName = dtSel.Rows(index)("d6")

strTemp = "        strSql.Append(""   "
If index > 0 Then
strTemp = strTemp & ", "
End If
strTemp = strTemp & strCol & " = " & strASName & " "")"

If String.IsNullOrEmpty(strCom) = False Then
strTemp = strTemp & " '" & strCom
End If

strSelString = strSelString & strTemp & vbCrLf

strParmat = strParmat & "        paras(" & intParmat & ") = New SqlParameter("""
strParmat = strParmat & strASName & """, SqlDbType."
strParmat = strParmat & strType
If strType.ToUpper <> "Date".ToUpper And strType.ToUpper <> "DateTime".ToUpper Then
strParmat = strParmat & ", " & strLen
End If
strParmat = strParmat & " )"

If String.IsNullOrEmpty(strCom) = False Then
strParmat = strParmat & " '" & strCom
End If
strParmat = strParmat & vbCrLf

strParmatValue = strParmatValue & "        paras(" & intParmat & ").Value = "
strParmatValue = strParmatValue & "1"
If String.IsNullOrEmpty(strCom) = False Then
strParmatValue = strParmatValue & " '" & strCom & " (" & strType & ")"
Else
strParmatValue = strParmatValue & " '" & " (" & strType & ")"
End If
strParmatValue = strParmatValue & vbCrLf
intParmat = intParmat + 1
Next

Return strSelString
End If

'插入
If rdoInsert.Checked = True Then
strSelString = ""
strInsValue = ""
Dim dtSel As DataTable
dtSel = grdSelCol.DataSource
For index As Integer = 0 To dtSel.Rows.Count - 1
strTab = dtSel.Rows(index)("d1")
strCol = dtSel.Rows(index)("d2")
strCom = dtSel.Rows(index)("d3")
strType = dtSel.Rows(index)("d4")
strLen = dtSel.Rows(index)("d5")
strASName = dtSel.Rows(index)("d6")

strTemp = "        strSql.Append(""   "
strTValue = "        strSql.Append(""   "
If index > 0 Then
strTemp = strTemp & ", "
strTValue = strTValue & ", "
End If
strTemp = strTemp & strCol & " "")"
strTValue = strTValue & strASName & " "")"

If String.IsNullOrEmpty(strCom) = False Then
strTemp = strTemp & " '" & strCom
strTValue = strTValue & " '" & strCom
End If

strSelString = strSelString & strTemp & vbCrLf
strInsValue = strInsValue & strTValue & vbCrLf

strParmat = strParmat & "        paras(" & intParmat & ") = New SqlParameter("""
strParmat = strParmat & strASName & """, SqlDbType."
strParmat = strParmat & strType
If strType.ToUpper <> "Date".ToUpper And strType.ToUpper <> "DateTime".ToUpper Then
strParmat = strParmat & ", " & strLen
End If
strParmat = strParmat & " )"

If String.IsNullOrEmpty(strCom) = False Then
strParmat = strParmat & " '" & strCom
End If
strParmat = strParmat & vbCrLf

strParmatValue = strParmatValue & "        paras(" & intParmat & ").Value = "
strParmatValue = strParmatValue & "1"
If String.IsNullOrEmpty(strCom) = False Then
strParmatValue = strParmatValue & " '" & strCom & " (" & strType & ")"
Else
strParmatValue = strParmatValue & " '" & " (" & strType & ")"
End If
strParmatValue = strParmatValue & vbCrLf
intParmat = intParmat + 1
Next

strSelString = strSelString & "        strSql.Append(""  ) "")" & vbCrLf
strSelString = strSelString & "        strSql.Append(""VALUES (     "")" & vbCrLf
strSelString = strSelString & strInsValue
strSelString = strSelString & "        strSql.Append(""  ) "")" & vbCrLf

Return strSelString
End If

Return ""
End Function

Private Function strFromSql() As String
Dim strFromstring As String = ""
Dim strTemp As String

If rdoSelect.Checked = True Then
Dim strType As String
Dim strFromTab As String
Dim strToTab As String
Dim strCom As String
Dim strLan1 As String
Dim strLan2 As String
Dim strLan3 As String

Dim dtFrom As DataTable
dtFrom = grdTabFrom.DataSource

For index As Integer = 0 To dtFrom.Rows.Count - 1
strType = dtFrom.Rows(index)("d1") & ""
strFromTab = dtFrom.Rows(index)("d2") & ""
strToTab = dtFrom.Rows(index)("d3") & ""
strCom = dtFrom.Rows(index)("d4") & ""
strLan1 = dtFrom.Rows(index)("d5") & ""
strLan2 = dtFrom.Rows(index)("d6") & ""
strLan3 = dtFrom.Rows(index)("d7") & ""

strTemp = ""
If index = 0 Then
strTemp = strTemp & "        strSql.Append("" FROM "")" & vbCrLf
strTemp = strTemp & "        strSql.Append(""   "
strTemp = strTemp & strFromTab & " "")"
If String.IsNullOrEmpty(strCom) = False Then
strTemp = strTemp & " '" & strCom

End If
strTemp = strTemp & vbCrLf

Else
strTemp = strTemp & "        strSql.Append(""   "
strTemp = strTemp & strType & " " & strToTab & " "")"
If String.IsNullOrEmpty(strCom) = False Then
strTemp = strTemp & " '" & strCom

End If
strTemp = strTemp & vbCrLf
Dim intOnNum As Integer
intOnNum = 0

If String.IsNullOrEmpty(strLan1) = False Then
strTemp = strTemp & "        strSql.Append(""   "
If intOnNum = 0 Then
strTemp = strTemp & "  ON "
Else
strTemp = strTemp & "  AND "
End If
strTemp = strTemp & strLan1 & " "")" & vbCrLf
intOnNum = intOnNum + 1
End If

If String.IsNullOrEmpty(strLan2) = False Then
strTemp = strTemp & "        strSql.Append(""   "
If intOnNum = 0 Then
strTemp = strTemp & "  ON "
Else
strTemp = strTemp & "  AND "
End If
strTemp = strTemp & strLan2 & " "")" & vbCrLf
intOnNum = intOnNum + 1
End If

If String.IsNullOrEmpty(strLan3) = False Then
strTemp = strTemp & "        strSql.Append(""   "
If intOnNum = 0 Then
strTemp = strTemp & "  ON "
Else
strTemp = strTemp & "  AND "
End If
strTemp = strTemp & strLan3 & " "")" & vbCrLf
intOnNum = intOnNum + 1
End If

strTemp = strTemp
End If

strFromstring = strFromstring & strTemp
Next
Else
Dim strTab As String
Dim strCom As String

Dim dtFrom As DataTable
dtFrom = grdTabFrom.DataSource

strTab = dtFrom.Rows(0)("d2")
strCom = dtFrom.Rows(0)("d4")

strTemp = ""
strTemp = strTemp & "        strSql.Append("" "
If rdoInsert.Checked = True Then
strTemp = strTemp & "INSERT INTO " & strTab & " ( "")"
End If
If rdoDelete.Checked = True Then
strTemp = strTemp & "DELETE FROM " & strTab & " "")"
End If
If rdoUpdate.Checked = True Then
strTemp = strTemp & "UPDATE " & strTab & " SET "")"
End If

If String.IsNullOrEmpty(strCom) = False Then
strTemp = strTemp & " '" & strCom

End If
strFromstring = strTemp & vbCrLf
End If

Return strFromstring
End Function

Private Function strWhSql() As String
Dim strWhString As String = ""

Dim strTemp As String

Dim strTab As String
Dim strCol As String
Dim strCom As String
Dim strType As String
Dim strLen As String
Dim strASName As String

If rdoInsert.Checked = True Then
Return ""
End If

Dim dtWh As DataTable
dtWh = grdWhCol.DataSource
For index As Integer = 0 To dtWh.Rows.Count - 1
strTab = dtWh.Rows(index)("d1")
strCol = dtWh.Rows(index)("d2")
strCom = dtWh.Rows(index)("d3")
strType = dtWh.Rows(index)("d4")
strLen = dtWh.Rows(index)("d5")
strASName = dtWh.Rows(index)("d6")
If index > 0 Then
strTemp = ""
Else
strTemp = "        strSql.Append("" WHERE  "")" & vbCrLf
End If
strTemp = strTemp & "        strSql.Append(""   "
If index > 0 Then
strTemp = strTemp & "AND "
End If

If grdTabFrom.Rows.Count > 1 Then
strTemp = strTemp & strTab & "." & strCol & " = " & strASName & " "")"
Else
strTemp = strTemp & strCol & " = " & strASName & " "")"
End If
If String.IsNullOrEmpty(strCom) = False Then
strTemp = strTemp & " '" & strCom
End If
strTemp = strTemp & vbCrLf
strWhString = strWhString & strTemp

strParmat = strParmat & "        paras(" & intParmat & ") = New SqlParameter("""
strParmat = strParmat & strASName & """, SqlDbType."
strParmat = strParmat & strType
If strType.ToUpper <> "Date".ToUpper And strType.ToUpper <> "DateTime".ToUpper Then
strParmat = strParmat & ", " & strLen
End If
strParmat = strParmat & " )"

If String.IsNullOrEmpty(strCom) = False Then
strParmat = strParmat & " '" & strCom
End If
strParmat = strParmat & vbCrLf

strParmatValue = strParmatValue & "        paras(" & intParmat & ").Value = "
strParmatValue = strParmatValue & "1"
If String.IsNullOrEmpty(strCom) = False Then
strParmatValue = strParmatValue & " '" & strCom & " (" & strType & ")"
Else
strParmatValue = strParmatValue & " '" & " (" & strType & ")"
End If
strParmatValue = strParmatValue & vbCrLf
intParmat = intParmat + 1
Next
Return strWhString
End Function

#End Region
'执行检索sql问返回结果集
Private Function SelsectDb(ByVal strsql As String) As DataTable
strConnectstring = "Password=" & txtDBPasswd.Text & ";Persist Security Info=True;User ID=" & txtDBUser.Text & ";Initial Catalog=" & txtDBName.Text & ";Data Source=" & txtDBIp.Text

Dim conn As SqlConnection = Nothing
Dim comm As SqlCommand = Nothing
Dim datap As SqlDataAdapter = Nothing
Dim dt As DataTable = New DataTable()
Try
conn = New SqlConnection(strConnectstring)
datap = New SqlDataAdapter()
comm = New SqlCommand()
conn.Open()
comm.Connection = conn
comm.CommandType = CommandType.Text
comm.CommandText = strsql
datap.SelectCommand = comm
datap.Fill(dt)
Return dt
Catch ex As Exception
MessageBox.Show(ex.Message)
Return Nothing
Finally
If datap IsNot Nothing Then

datap.Dispose()
End If
If comm IsNot Nothing Then

comm.Dispose()
End If
datap.Dispose()

If conn IsNot Nothing Then
If conn.State = ConnectionState.Open Then
conn.Close()
End If
End If
End Try
End Function

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

End Sub
End Class


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: