2017-04-11 73 views
1

只要我有一個Excel文件,我裝成SQL Server 2008中如何自動插入當前日期,同時將數據插入到SQL Server 2008

我想插入當前日期爲從Excel而添加日期相同的細胞轉移...然後每次添加數據時自動插入日期,永不丟失舊日期。我怎樣才能做到這一點?

string ssqltable = comboBox1.GetItemText(comboBox1.SelectedItem); 
string myexceldataquery = "select * from [" + ssqltable + "$]"; 

try 
{ 
    OleDbConnection oconn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + imagepath + ";Extended Properties='Excel 12.0 Xml; HDR=YES;IMEX=1;';"); 

    string ssqlconnectionstring = "Data Source=.;Initial Catalog=Bioxcell;Integrated Security=true"; 

    OleDbCommand oledbcmd = new OleDbCommand(myexceldataquery, oconn); 
    oconn.Open(); 

    SqlBulkCopy bulkcopy = new SqlBulkCopy(ssqlconnectionstring); 

    DataTable dt = new DataTable(); 
    dt.Load(oledbcmd.ExecuteReader()); 
    bulkcopy.DestinationTableName = ssqltable; 

    for (int i = 0; i < dt.Columns.Count; i++) 
    { 
     bulkcopy.ColumnMappings.Add(i, i); 
    } 

    bulkcopy.WriteToServer(dt); 
    oconn.Close(); 
}  

我用這個,但我知道插入只有最後一個記錄 我想在新創建的行插入當前日期和不輸以前的專欄日期。例如,當我每次插入數據插入新的日期節能與舊日期

SqlCommand Update6 = new SqlCommand("insert into Overseas (Date) Values('" + DateTime.Now.ToShortDateString() + "')", conn); 
Update6.ExecuteScalar(); 

舊數據,而使用

SqlCommand Update6 = new SqlCommand("insert into Overseas (Date) Values (GETDATE())", conn); 
         Update6.ExecuteNonQuery(); 

結果被

enter image description here 那麼解決方案是什麼?

+2

提示:列定義中的'DEFAULT getdate()'。 –

+0

抱歉不明白..你能解釋一下嗎? –

+0

post edited ....../ –

回答

0

設置GETDATE()作爲海外表你日期列的默認約束。

SQL命令來添加約束:

ALTER TABLE Overseas 
ALTER COLUMN Date DATETIME NOT NULL DEFAULT GETDATE() 

後,您無需任何價值,同時將傳遞給此列。只需插入剩餘的列,這將自動插入。

OR

試試這個:

SqlCommand Update6 = new SqlCommand("insert into Overseas (Date) Values (GETDATE())", conn); 
Update6.ExecuteScalar(); 

基於您的數據庫的截圖,希望此查詢可以幫助:

INSERT INTO Overseas (EnglishName,ProductCode,ProductName,TerritoryCode,TerritoryName,Salesvalue,CreditValue,NetSalesValue,Sales,Bonus,Bioxellbricks,BioxellTerritories,Date,ID) 
SELECT EnglishName,ProductCode,ProductName,TerritoryCode,TerritoryName,Salesvalue,CreditValue,NetSalesValue,Sales,Bonus,Bioxellbricks,BioxellTerritories,GETDATE(),ID from [exceltablename] 

這裏Overseas是你的數據庫表和exceltablename是Excel中的源表。

+0

舊數據仍然無法正常工作。我想插入新創建的行當前日期並且不會失去以前的專欄日期。例如,當我插入數據每次插入新的日期保存舊數據與舊日期 –

+0

好吧,它使用(SqlConnection的康恩=新的SqlConnection(CONNSTRING)){ 康涅狄格州 爲我工作。打開(); 的SqlCommand CMD =新的SqlCommand( 「插入到海外(ID,日期)的值(2,GETDATE())」,康涅狄格州); cmd.ExecuteNonQuery(); } https://ibb.co/gGNby5 –

+0

@AmrKamal你可以詳細說明使用上述代碼時遇到的問題嗎? –

1

您可以簡單地使用Datetime.Now();函數獲取當前日期。

也使用zzz格式說明符來獲取時區偏移爲小時和分鐘。您還希望使用HH格式說明符以24小時格式獲取小時。

DateTime.Now.ToString( 「YYYY-MM-DDTHH:MM:sszzz」)

結果:

2011-08-09T23:49:58+02:00 

一些區域性設置使用期限,而不是冒號的時間,所以你可能要而不是使用時間分隔符文字冒號:

DateTime.Now.ToString("yyyy-MM-ddTHH':'mm':'sszzz") 

Custom Date and Time Format Strings

希望這會對你有用。謝謝

+0

我知道,但我不知道究竟是什麼體面的SQL命令..我的意思是添加當前日期,每次在整個表格 –

0

有一個函數GETDATE()用於此目的。

返回當前數據庫系統時間戳記作爲日期時間值 而沒有數據庫時區偏移量。此值來自運行SQL Server 實例的計算機的 操作系統。

https://docs.microsoft.com/en-us/sql/t-sql/functions/getdate-transact-sql

+0

我不知道更新,但我不知道什麼是體面的SQL命令這..我的意思是每次添加當前日期而不是在整個表中更新 –

+0

我是否理解正確 - 您想更新日期列中缺少日期的所有行?或者你想插入新創建的行? –

+0

在新創建的行不輸以前的專欄日期。例如,當我插入數據每次插入新的日期節約與舊日期 –

相關問題