2016-08-09 149 views
0

私はこれらのエラーを参照してください。 'Fill'を呼び出す前にSelectCommandプロパティが初期化されていません。 "adb.Fill(DS1)"vb.net SelectCommandプロパティは、 'Fill'を呼び出す前に初期化されていません

Imports System.Data.Sql 
Module ComModule 
Public sqlconn As New SqlClient.SqlConnection 
Public Sub openconn() 
    If sqlconn.State = 1 Then sqlconn.Close() 
    Try 
     sqlconn.ConnectionString = "Data Source=MRSOFTWARE-PC;Initial Catalog=ComShop;Integrated Security=True" 
     sqlconn.Open() 
    Catch ex As Exception 
     MessageBox.Show(ex.Message, "Not Connection", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign) 
     sqlconn.Close() 
     End 
    End Try 
End Sub 
Public Function LastNum(tablename, orderbyfield) As Integer 
    LastNum = 0 
    Dim str = "select * from " & tablename & "order by" & orderbyfield 
    Dim adb As New SqlClient.SqlDataAdapter() 
    Dim ds1 = New DataSet 
    adb.Fill(ds1) 
    Dim DT As DataTable 
    DT = ds1.Tables(0) 
    If DT.Rows.Count <> 0 Then 
     Dim i = DT.Rows.Count - 1 
     LastNum = Val(DT.Rows(i).Item(0)) 
    End If 
End Function 

エンドモジュール


TextBox1.Text = Format(LastNum("Customer", "CustomerId") + 1, "c0") 
+1

_Dim adb新しいSqlClient.SqlDataAdapter( "select * from"&tablename& "order by"&orderbyfield)_しかし、入力に注意してください。これはSQLインジェクションのオープン・ドアです(スペースの欠落) – Steve

+0

selectコマンドを文字列に入れるだけで、何とか 'SqlDataAdapter'に渡す必要があります(コンストラクタ、.SelectCommandプロパティなど) –

答えて

0

上 は...

まず、あなたはSQLインジェクションを防ぐために、パラメータ化クエリを使用する必要があり、これを試してみてください。

必要なものは、SQLCommand有効なSQLクエリを持つオブジェクトです。次に、そのSQLCommandオブジェクトをSQLAdapterコンストラクタにargsとして渡す必要があります。

Imports System.Data.Sql 
    Module ComModule 
     Public sqlconn As New SqlClient.SqlConnection 
     Public Sub openconn() 
      If sqlconn.State = 1 Then sqlconn.Close() 
      Try 
       sqlconn.ConnectionString = "Data Source=MRSOFTWARE-PC;Initial Catalog=ComShop;Integrated Security=True" 
       sqlconn.Open() 
      Catch ex As Exception 
       MessageBox.Show(ex.Message, "Not Connection", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign) 
       sqlconn.Close() 
       End 
      End Try 
     End Sub 
     Public Function LastNum(tablename, orderbyfield) As Integer 
      LastNum = 0 
      Dim str = "select * from @tablename order by @orderbyfield" 
      Dim sqlCmd As New SqlClient.SqlCommand(str , sqlCon) 
      sqlCmd.Parameters.Add("@tablename", SqlDbType.VarChar, 50).Value=tablename 
      sqlCmd.Parameters.Add("@orderbyfield", SqlDbType.VarChar, 50).Value=orderbyfield 
      Dim adb As New SqlClient.SqlDataAdapter(sqlCmd) 
      Dim ds1 = New DataSet 
      adb.Fill(ds1) 
      Dim DT As DataTable 
      DT = ds1.Tables(0) 
      If DT.Rows.Count <> 0 Then 
       Dim i = DT.Rows.Count - 1 
       LastNum = Val(DT.Rows(i).Item(0)) 
      End If 
     End Function 


    End Module 
+0

テキストボックス1のc1で表示Button1をクリックするとc3が表示され、クリックするとag4が表示されますc4 ....など –

関連する問題