0

学校の課題で、先生から受け取ったコードにいくつかの SQL ステートメントを入力する必要があります。また、ツリーの異なるテーブルを既存のデータベースに作成します。これらのテーブルを追加するための新しいクラスを作成しようとすると、何か間違っていると思います。テーブルが作成されることはありません。どうして?!

データベース接続:

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

TABLES (作成用)

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
4

1 に答える 1

0

あなたの CREATE TABLE および DROP TABLE ステートメントは完全に正しくありません。SQL Server Management Studio をお持ちの場合は、それを使用してこれらのステートメントを作成する方法を確認できます。オブジェクト エクスプローラー ペインで既存のテーブルを右クリックし、[スクリプト テーブルとして...] -> [DROP and CREATE to] を選択します。 >「新しいクエリ エディタ ウィンドウ」。あなたは似たようなものを得るでしょう

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 Express/Windows 7 x64 での動作をテスト済み。

テーブル定義に合わせて調整してください。

于 2012-11-21T20:45:28.620 に答える