简单地说,我有一个Excel文件,我把它加载到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();
结果是
在此处输入图像描述那么解决方案是什么?
将GETDATE()
设置为"海外"表的"日期"列的默认约束。
用于添加约束的 SQL 命令:
ALTER TABLE Overseas
ALTER COLUMN Date DATETIME NOT NULL DEFAULT GETDATE()
发布此内容后,插入时无需向此列传递任何值。只需插入其余列,这将自动插入。
或
试试这个:
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 源表。
你可以简单地使用 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")
自定义日期和时间格式字符串
希望这对你有用..谢谢
函数 GETDATE(( 用于此目的。
以日期时间值的形式返回当前数据库系统时间戳 没有数据库时区偏移量。此值派生自 SQL Server 实例所在的计算机的操作系统 正在运行。
https://learn.microsoft.com/en-us/sql/t-sql/functions/getdate-transact-sql