2013-05-15 67 views
0

我對如何從串口分割數據然後將其保存到訪問數據庫到其指定列存在問題。我發現了一個用VB.net編寫的例子,但我找不到用c#編寫的示例代碼。串行數據將是這樣的:Visual C#中用於分割串行數據的OLE DB命令

,230302

,230302

不斷。

這是我到目前爲止寫的:

void sp_DataReceived(object sender, SerialDataReceivedEventArgs e) 
    { 
     Thread.Sleep(1000); 
     string[] data = _serialPort.ReadExisting().Split(','); 
     OleDbConnection connect = new OleDbConnection(); 
     connect.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\xp\Desktop\HydroDatabase.accdb"; 
     connect.Open(); 
     OleDbCommand command = new OleDbCommand(); 
     command.CommandText = "INSERT Into HydroLog(WaterFlow,TurbineRPM) Values(@data1, @data2)", connect); 
    } 

回答

0

您需要使用using語句來處理資源。您的字符串分割會在開始時產生一個空的條目,因此請嘗試使用StringSplitOptions

const string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\xp\Desktop\HydroDatabase.accdb"; 
const string commandText = "INSERT Into HydroLog(WaterFlow,TurbineRPM) Values(@data1, @data2)"; 

string[] data = _serialPort.ReadExisting().Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); 

using(var connect = new OleDbConnection(connectionString)) 
{ 
    using(var command = new OleDbCommand(commandText, connect)) 
    { 
     command.Parameters.AddWithValue("@data1", data[0]); 
     command.Parameters.AddWithValue("@data2", data[1]); 

     connect.Open(); 
     command.ExecuteNonQuery(); 
    } 
} 
+0

嗨Romoku,感謝您的代碼。它運行完美,沒有調試,但似乎數據已被記錄到表中。數據仍然連續發送。 – user2334318

0

你需要在執行之前添加此。

command.Parameters.Add("@data1", OldeByType.VarChar).Value = data[0]; 
command.Parameters.Add("@data2", OldeByType.VarChar).Value = data[1]; 
+0

感謝您的回覆,INSERT命令如何正確? HYDROLOG將成爲訪問表中的名稱。 – user2334318