2012-11-21 18 views
0

我有一個學校作業,我們要在我們的老師的代碼中填寫一些SQL語句。我們也將樹不同的表格變成已經存在的數據庫。當我嘗試創建一個新類來添加這些表時,我認爲我做錯了什麼。這些表格從來沒有創建過。爲什麼?!使用Visual Studio的新功能,如何將表添加到數據庫?

DB連接:

Public Class ClassConnection 
'Mot citrix 
Dim Koppling As New System.Data.SqlClient.SqlConnection("Initial Catalog=EmbeddedVB; Data Source=LUiis02; Integrated Security=true") 
'Mot access 
'Dim Koppling As New System.Data.OleDb.OleDbConnection("Provider=Microsoft.jet.OLEDB.4.0;Data source=Poster.mdb") 
'lokalt mot SQL-server 
'Dim Koppling As New System.Data.SqlClient.SqlConnection("Initial Catalog=Testar;Data Source=(local); Integrated Security=true;") 

Public ReadOnly Property ReturneraKoppling() As SqlClient.SqlConnection 
    Get 
     Return Koppling 
    End Get 
End Property 

Sub open() 
    Koppling.Open() 
End Sub 

Sub close() 
    Koppling.Close() 
End Sub 
End Class 

表(創建)

Public Class Tables 
Private mySqlConnection As New ClassConnection 
Private myAdapter As SqlDataAdapter 
Private mySqlCommand As New SqlCommand 
Private ds As DataSet 
Private gammaltPnr As String 

Public Sub fyllDB() 
    mySqlCommand.Connection = mySqlConnection.ReturneraKoppling() 
    mySqlCommand.CommandType = CommandType.Text 

    mySqlConnection.open() 
    mySqlCommand.CommandText = "CREATE TABLE IF NOT EXIST Kurs4918(" & 
     "kursnamn char(30) NOT NULL PRIMARY KEY " & 
     ")" 
    myAdapter = New SqlDataAdapter(mySqlCommand) 
    mySqlCommand.ExecuteNonQuery() 
    mySqlConnection.close() 

    mySqlConnection.open() 
    mySqlCommand.CommandText = "CREATE TABLE IF NOT EXIST Elev4918 (" & 
     "pnr char(11) NOT NULL PRIMARY KEY, " & 
     "fornamn char(20), " & 
     "efternamn char(20), " & 
     "ort char(15) " & 
     ") " 
    myAdapter = New SqlDataAdapter(mySqlCommand) 
    mySqlCommand.ExecuteNonQuery() 
    mySqlConnection.close() 

    mySqlConnection.open() 
    mySqlCommand.CommandText = "CREATE TABLE IF NOT EXIST KursElev4918(" & 
     "pnr char(11) NOT NULL PRIMARY KEY, " & 
     "kursnamn char(30) " & 
     ") " 
    myAdapter = New SqlDataAdapter(mySqlCommand) 
    mySqlCommand.ExecuteNonQuery() 
    mySqlConnection.close() 

End Sub 

啓動Form1.vb的(這應該運行fyllDB()從表右....

Public Class frmMain 
Inherits System.Windows.Forms.Form 
Private db As New Tables 

Private Sub fill() 
    db.fyllDB() 
End Sub 
+0

您允許使用實體框架嗎? –

+0

是的沒有約束,但我不知道它是什麼?一個插件? –

+0

這是ado.net的最新替代品。 http://www.codeproject.com/Articles/184133/Using-Entity-Framework-4-1-Code-First-with-an-exisv(替換可能不是確切的單詞) –

回答

0

你的CREATE TABLE和DROP TABLE語句不太對,如果你有SQL Server Management Studio,你可以使用它以查看如何生成這些語句:右鍵單擊Object Explorer窗格中的現有表並選擇「Script Table as ...」 - >「DROP and CREATE to」 - >「New Query Editor Window」。你會得到類似的東西

USE [testing] 
GO 

/****** Object: Table [dbo].[testTable] Script Date: 11/21/2012 20:35:02 ******/ 
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[testTable]') AND type in (N'U')) 
DROP TABLE [dbo].[testTable] 
GO 

USE [testing] 
GO 

/****** Object: Table [dbo].[testTable] Script Date: 11/21/2012 20:35:02 ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE TABLE [dbo].[testTable](
    [number] [int] NULL, 
    [str] [nchar](10) NULL, 
    [tim] [time](7) NULL 
) ON [PRIMARY] 

GO 

從哪裏你應該能夠挑選出你需要的部分。

要執行DROP/CREATE語句,請使用SqlCommand.ExecuteNonQuery Method

編輯:

因此,您FyllDb方法會更喜歡這樣的:

Public Sub FyllDb() 
    Dim sqlCmd As New SqlCommand 
    Dim sqlConn = New SqlConnection("Server=.\SQLEXPRESS;Database=testing;Trusted_Connection=True;") 
    sqlCmd.Connection = sqlConn 

    sqlCmd.CommandText = "IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[testTable2]') AND type in (N'U')) DROP TABLE [dbo].[testTable2]" 

    Try 
     sqlConn.Open() 
     sqlCmd.ExecuteNonQuery() 
    Catch ex As Exception 
     MsgBox("Error deleting table: " & ex.Message) 
    Finally 
     sqlConn.Close() 
    End Try 

    sqlCmd.CommandText = "CREATE TABLE [dbo].[testTable2]([number] [int] NULL, [str] [nchar](10) NULL, [tim] [time](7) NULL) ON [PRIMARY]" 

    Try 
     sqlConn.Open() 
     sqlCmd.ExecuteNonQuery() 
    Catch ex As ArgumentException 
     MsgBox("Error creating table: " & ex.Message) 
    Finally 
     sqlConn.Close() 
    End Try 

End Sub 

- 測試與VS2012/SQL Server 2008 R2的快遞/ Windows 7的64位工作。

請根據您的表格定義進行調整。

+0

Grear答案,我會下載軟件試試這個並返回一個更新! –

+0

我已經下載了它並嘗試了它,但是沒有真正得到它,因爲我沒有登錄到服務器的詳細信息,所以我不能使用你正在談論的語句,我發現了一些similr,稱爲模板。創建模板與我在網上找到的某些解決方案非常不同,我在帖子底部添加了另一個嘗試,這是否完全錯誤? –

+0

正如你可以看到我使用兩個:myAdapter =新的SqlDataAdapter(mySqlCommand) mySqlCommand.ExecuteNonQuery()執行原因我不知道使用哪一個。但是當我運行該程序並嘗試做某些事情時,它會關閉給我一個sql錯誤,這仍然會導致我認爲它們從未被創建。在我的啓動文件中我有:Private db As New Tables Private Sub fill() db.fyllDB() End Sub 哪個應該在啓動時創建表? –

相關問題