2017-09-09 8 views
3

ここにいくつか問題があります。私は助けが必要です。Visual Basic、コピーは成功しましたが、SQLテーブルにデータを挿入しません。

最近、私はstock.mdfというローカルデータベースを作成しました。アプリケーションは、ホスティングMySQLデータベースからこのローカルSQL Serverデータベースにすべてのデータを取得しています。

私はsqlBulkCopyを使用してすべてのデータを挿入しています。私は挿入後にそれを見ようとしました。しかし、私のアプリケーションを閉じると、私はテーブルのデータをチェックするために戻ります。挿入されません。何故ですか?ここで

私のコードです:

ここ

これはsqlBulkCopy作業場所になりますホスティング

Dim connStr As String = "server=xxxx;user=xxx;database=xxx;password=xxxx;" 
    Dim conn As New MySqlConnection(connStr) 
    Dim cmd As New MySqlCommand 
    Dim Adapter As New MySqlDataAdapter 
    Dim StockData As New DataTable 

    Try 
     Dim SQL As String = "SELECT * FROM stock" 
     Console.WriteLine("Connecting to MYSQL.....") 
     conn.Open() 
     cmd.Connection = conn 
     cmd.CommandText = SQL 

     Adapter.SelectCommand = cmd 
     Adapter.Fill(StockData) 

     ' StockViewGrid.DataSource = StockData 
    Catch ex As Exception 
     Console.WriteLine(ex.ToString()) 

    Finally 
     conn.Close() 
     Console.Write("Done") 
    End Try 

からデータを取得します:私がしようとしています、同様に

テーブルから見ることができます。

Dim Local_connectionStr As String = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|stock.mdf;Integrated Security=True" 
    Dim Local_conn As New SqlConnection(Local_connectionStr) 
    Dim Local_cmd As New SqlCommand 
    Dim Local_Adapter As New SqlDataAdapter 
    Dim Local_StockData As New DataTable 

    Try 
     Using sqlBulkCopy As New SqlBulkCopy(Local_conn) 
      'Set the database table name 
      sqlBulkCopy.DestinationTableName = "stock" 

      '[OPTIONAL]: Map the DataTable columns with that of the database table 
      sqlBulkCopy.ColumnMappings.Add("stockId", "stockId") 
      sqlBulkCopy.ColumnMappings.Add("id_android", "id_android") 
      sqlBulkCopy.ColumnMappings.Add("itemCode", "itemCode") 
      sqlBulkCopy.ColumnMappings.Add("quantity", "quantity") 
      Local_conn.Open() 
      sqlBulkCopy.WriteToServer(StockData) 
      Local_conn.Close() 
     End Using 
    Catch ex As Exception 
     Console.WriteLine(ex.ToString()) 

    Finally 
     Local_conn.Close() 
     Console.Write("Done") 

    End Try 


    Try 
     Dim SQL As String = "SELECT * FROM stock" 
     Console.WriteLine("Connecting to MYSQL.....") 
     Local_conn.Open() 
     Local_cmd.Connection = Local_conn 
     Local_cmd.CommandText = SQL 

     Local_Adapter.SelectCommand = Local_cmd 
     Local_Adapter.Fill(Local_StockData) 

     StockViewGrid.DataSource = Local_StockData 
    Catch ex As Exception 
     Console.WriteLine(ex.ToString()) 

    Finally 
     Local_conn.Close() 
     Console.Write("Done") 

    End Try 
+0

iircデバッグで実行したときにdevフォルダにコピーされたローカルMSSQL dbを使用していくつか問題があり、終了時に結果が破棄されます。 (この問題のより良いリコールの誰かがまもなく来るでしょう!) – peterG

+0

うん、私はそれを解決するために誰かを待っている間somemore情報を試してみてください –

答えて

0

私はコメントできません(十分な点がないので)私はここに私の考えを入れます。あなたは

Console.WriteLine(StockData.Rows.Count.ToString) 
Console.ReadLine() 

と予想されるデータを得たことを確認することができます。また、あなたの先テーブルが自動インクリメントでPKを持っていない、それはありませんか? 答えとしてコメントを残して申し訳ありません。 (未テストコード)

+0

はいそれはAIを持っています.Hmmは私のコードの問題ではないようです –

+0

それokコメントのためのthx –

0

残念ながら、あなたのコード抽出にはヘッダーが欠けているので完全ではありませんが、私は絶対に確信することはできませんが、検索ルーチンでStockDataをローカル変数として宣言しているようです。つまり、これはMySQLのデータで満たされているかもしれませんが、このルーチンから抜けてすぐに破棄されます。したがって、sqlBulkCopyルーチンのStockData変数は空になるため、何も挿入しません。スコープを修正し、MySQLから読み込まれたStockDataがSqlBulkCopyで使用されているStockDataと同じであることを確認する必要があります。

+0

ええそれは私がsqlserverの管理で試してみました同じです。しかし、私がStock.mdfローカルデータベースでテストプロジェクトを試してみると、それは働いていないでしょう –

+0

それはコメントのための良いthxです –

関連する問題