2014-07-23 72 views
0

我目前正在使用windows窗體應用程序和sql server爲我的表編寫VB.net。我使用兩個組合框創建訂單,其中一個用於訂購材料類型,另一個用於名稱。在底部還有一個提交按鈕來運行SQL「Insert Into」代碼。材質組合框中填充了一個名爲「tbl.channel」的SQL表中的一列材質類型。該列下的每種材料類型都具有與該行關聯的零件號,ID和捆綁尺寸。我希望所有與該材料類型相關的信息寫入一個記錄所有訂單的新表格,用戶只需從組合框中選擇材料類型即可。如何使用「Select From」sql代碼將關聯的信息與該材料類型一起寫入新表中,以跟蹤所有訂購的材料?在VB.net中使用SQL查詢來撤銷adjacant行數據

Try 
      Dim connectionstring As String = Nothing 
      Dim connection As SqlConnection 
      Dim command As SqlCommand 
      Dim adapter As New SqlDataAdapter 
      Dim ds As New DataTable 
      Dim i As Integer = 0 
      Dim sql As String = Nothing 

     connectionstring = "DATA SOURCE = BNSigma\Core ; integrated security = true" 
     sql = "Select Channel, [Bundle Size], ID from Production.dbo.tblchannel" 

     connection = New SqlConnection(connstring) 

     connection.Open() 
     command = New SqlCommand(sql, connection) 
     adapter.SelectCommand = command 
     adapter.Fill(ds) 

    Catch ex As Exception 
     MsgBox(ex.ToString) 

    End Try 



    Try 
     Using conn1 As New SqlConnection(connstring) 
      conn1.Open() 
      Using comm1 As SqlCommand = New SqlCommand("INSERT INTO Production.dbo.tbl (Channel, OrderedBy, Date1, BundleSize, ID) Values (@Channel, @Orderedby, @getdate(), @BundleSize, @ID)", conn1) 
       With comm1.Parameters 
        .AddWithValue("@Channel", CBChannel.SelectedValue) 
        .AddWithValue("@OrderedBy", CBName.SelectedValue) 
        .AddWithValue("@BundleSize", CBChannel.SelectedValue) 
        .AddWithValue("@ID", CBChannel.SelectedValue) 
       End With 
      End Using 
     End Using 

    Catch ex As Exception 
     MsgBox("Unable to make SQL connection") 
     MsgBox(ex.ToString) 
    End Try 
+0

對不起,大家好,我的代碼的最高位出了問題,那是一個try語句,後面是變暗的變量。 – Cheddar

+0

你真的需要發佈如此龐大的代碼來解釋你的問題嗎? – Rahul

+0

只是想給你所有的數據,我可以拉胡爾。 – Cheddar

回答

0

我不確定我明白你的目標,但你是否想要這麼做?

INSERT Production.dbo.tbl (Channel, OrderedBy, Date1, BundleSize, ID) 
SELECT Channel, @Orderedby, getdate(), BundleSize, ID 
FROM tbl.channel 
WHERE ID = @ID 

我很好確信,雖然你應該只寫channel.ID到訂單表 - 你有一個令人信服的理由寫多餘的值?

+0

我認爲這段代碼會被修改,唯一的問題是頻道排序表或跟蹤訂單的表沒有設置爲跟蹤頻道表中的ID。之前的編碼器根本沒有設置好。我是否可以更改材料類型列的位置ID = @ ID? – Cheddar

+0

簡而言之,訂購頻道表上的ID只是一個從1開始的長屁股列表,但是該表格中有很多條目。 – Cheddar

+0

我並不真正關注。如果你想包含兩個(或更多)表的模式,我們可以看看它們。您是否有能力修復數據庫,或者您是否需要癱瘓? – clweeks

0

SQL允許您使用SELECT查詢來填充INSERT語句的值。事情是這樣的:

Public Sub PopulateOrder(ByVal MaterialID As Integer, ByVal SalesName As String) 

    Dim sql As String = "INSERT INTO Production.dbo.tbl (Channel, OrderedBy, Date1, BundleSize, ID) SELECT Channel, @SalesName, current_timestamp, [Bundle Size], ID from Production.dbo.tblchannel WHERE ID = @MaterialID" 

    Using cn As New SqlConnection("connection string here"), _ 
      cmd As New SqlCommand(sql, cn) 

     'Better to declare a specific database type than let .AddWithValue() try to infer one for you 
     cmd.Parameters.Add("@SalesName", SqlDbType.NVarChar, 50).Value = SalesName 
     cmd.Parameters.Add("@MaterialID", SqlDbtype.Int).Value = MaterialID 

     cn.Open() 
     cmd.ExecuteNonQuery() 
    End Using 
End Sub 

調用它像類似這樣的代碼:

PopulateOrder(CBChannel.SelectedValue, CBName.SelectedValue) 

但對於它的價值,它幾乎總是一個壞主意來複制整個表信息。

+0

當你說聲明一個特定的數據庫時,我可以用數據庫聲明一個表嗎? – Cheddar

+0

我說「'聲明一個特定的數據庫**類型**'」。看看我如何使用類型名稱作爲創建參數的一部分。 'AddWithValue()'方法會爲你推斷出這個類型的名字,但是它有時會遇到類型名稱錯誤的問題。 –

+0

但是要回答這個問題:我不確定你在問什麼,但是你可以使用'CREATE TABLE'和'USE DATABASE'命令作爲VB的SQL字符串的一部分。 –