2013-06-12 174 views
0

我嘗試更新sqldatabase服務器。我之前在visual studio中使用buildin「Local Database」做了這個。乙 我這樣做(簡稱)C#SQL Server更新

System.Data.SqlServerCe.SqlCeCommandBuilder cb; 
cb = new System.Data.SqlServerCe.SqlCeCommandBuilder(da); 
cb.DataAdapter.Update(ds1, "Alarmen"); 

但內置的數據庫沒有達到要求。我不得不使用Microsoft SQL Server 2005. 我也嘗試過這樣做,但那不起作用。 首先我填一個數據庫中使用以下命令設置數據庫:\

fillDataSet() 
{ 
    SqlConnection _con = new SqlConnection("server=(local)\\SQLExpress;database=Alarmen;integrated Security=SSPI;"); 
    string sql = "SELECT * FROM tbl_alarmen"; 

    try 
    { 
     _con.Open(); 
    } 
    catch (Exception ex) 
    { 
     log.Info("Database kon niet geopend worden " + ex); 
    } 

    DataSet ds1 = new DataSet(); 

    try 
    { 
     sql = "SELECT * FROM dbo.tbl_alarmen"; 

     _cmd = new SqlCommand(sql, _con); 
     _dap = new SqlDataAdapter(_cmd); 

     _dap.Fill(ds1, "Alarmen"); 

     foreach (DataRow drow in ds1.Tables["Alarmen"].Rows) 
     { 
      log.Info("Test"); 
     } 

    } 
    catch (Exception err) 
    { 
     log.Info("Database lezen mislukt " + err); 
    } 

    try 
    { 
     _con.Close(); 
    } 
    catch (Exception ex) 
    { 
     log.Info("Database sluiten mislukt " + ex); 
    } 
     _dap.Fill(ds1, "Alarmen"); 

     foreach (DataRow drow in ds1.Tables["Alarmen"].Rows) 
     { 
      log.Info("Test"); 
     } 

    } 
    catch (Exception err) 
    { 
     log.Info("Database lezen mislukt " + err); 
    } 

    try 
    { 
     _con.Close(); 
    } 
    catch (Exception ex) 
    { 
     log.Info("Database sluiten mislukt " + ex); 
    } 
} 

然後我添加行和修改數據集中的項目,並嘗試OP更新數據庫的變化。

UpdateDatabase() 
{ 
    SqlConnection _con = new SqlConnection("server=(local)\\SQLExpress;database=Alarmen;integrated Security=SSPI;"); 
    string sql = "SELECT * FROM tbl_alarmen"; 

    try 
    { 
     _con.Open(); 
    } 
    catch (Exception ex) 
    { 
     log.Info("Database kon niet geopend worden " + ex); 
    } 

    try 
    { 
     var con = new SqlConnection(connectionString); 
     var adapter = new SqlDataAdapter("SELECT * FROM tbl_alarmen", con); 
     new SqlCommandBuilder(adapter); 

     // 
     // Fill the DataAdapter with the values in the DataTable. 
     // 
adapter.Fill(ds1); 
     // 
     // Insert the data table into the SQL database. 
     // 
adapter.Update(ds1);    
    } 
    catch (Exception e) 
    { 
     log.Info("Fill database failed " + e); 
    } 

    try 
    { 
     _con.Close(); 
    } 
    catch (Exception ex) 
    { 
     log.Info("Database sluiten mislukt " + ex); 
    } 
} 

我沒有收到任何錯誤,但數據庫一直爲空。

我現在不應該使用「SELECT *」來解決安全問題。我需要在將來改變這一點。

我看到我沒有問一個真正的問題。我在代碼中做了什麼錯誤,我該如何修復它。

+1

好了,第一反模式我在代碼中看到的是,打開時如果有異常拋出連接,你報告錯誤,然後**繼續**嘗試使用連接。 –

+0

感謝您的意見。這是我可以使用的東西。但我使用try-catch主體來查看是否有錯誤。問題是錯誤不是trown。所以我認爲他們不會給出任何錯誤。 – Gulpener

+1

另外,考慮在打開一個'SqlConnection'時考慮使用'using'子句,以便在發生問題時更輕鬆地處理連接。看到這個[教程](http://www.dotnetperls.com/sqlconnection)。 此外,您使用'try/catch'塊只記錄異常信息而不做其他事情。這不是一個好的做法 - 只有在你打算做一些事情(例如回滾)時纔會發現異常。更好,更乾淨的方法是使用'AppDomain.UnhandledException'。例如:[link](http://stackoverflow.com/questions/3133199/net-global-exception-handler-in-console-application)。 – w128

回答

0

嘗試

adapter.Fill(ds1, "Alarmen") 

然後

adapter.Update(ds1, "Alarmen"); 

this MS link for more info

+0

非常感謝您的回答。現在我還有其他錯誤。但我認爲這與我的問題無關。 – Gulpener