gpt4 book ai didi

c# - 将日期时间插入 Access

转载 作者:行者123 更新时间:2023-11-30 21:03:24 24 4
gpt4 key购买 nike

问题:我正在尝试使用 C# 中的 Oledb 接口(interface)将日期时间插入到 Access 数据库中。

黑客解决方案:在不使用 command.Properties 的情况下生成我的插入字符串

我可以毫无问题地将文本插入数据库,但是在尝试 datetime 时,我最终遇到了这个错误:System.Data.OleDb.OleDbException {"Data type mismatch in criteria expression."}

有几篇文章与此类似,但可惜没有有效的解决方案。

这是我的代码:

void TransferData()
{
string instCmd = Get_InsertCommand(0); // hard coded table 0 for testing

Fill_ProductTable_ToInsert();

con.Open();


// It would be nice not to have to separate the date indexes
int[] textIndex = { 0, 1, 2, 3, 4, 7 };
int[] dateIndex = { 5, 6 };
try
{
foreach (DataRow row in DataToStore.Tables[0].Rows)
{
OleDbCommand command = new OleDbCommand();
command.Connection = con;

command.CommandText = instCmd;

foreach(int j in textIndex)
command.Parameters.AddWithValue("@" + j, row[j]);
foreach (int j in dateIndex)
{

// TESTING CODE
///////////////////////////////////////////////////////////////////////////

string input = "#\'" +DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") +"\'#";
command.Parameters.AddWithValue("@" + j, input.ToString());
Program.WriteLine(input.ToString());

///////////////////////////////////////////////////////////////////////////
}


command.ExecuteNonQuery();
}
}
finally
{
con.Close();
}
}

string Get_InsertCommand(int i)
{
string sqlIns = "INSERT INTO " + DataToStore.Tables[0].TableName + " (";
string temp = "VALUES (";
for (int j = 0; j < expected_header[i].Length - 1; j++)
{
sqlIns += expected_header[i][j] + ", ";
temp += "@" + j + ", ";
}

int lastIndex = expected_header[i].Length -1;
sqlIns += expected_header[i][lastIndex] + ") ";
temp += "@" + lastIndex + ")";
sqlIns += temp;

return sqlIns;
}

在标记为测试代码的区域中,我已经尝试了我能想到的所有日期时间排列。我用 # 和 ' 尝试了每一种格式我尝试了这些格式:yyyy-MM-dd、yyyyMMdd、yyyy\MM\dd、yyyy/MM/dd我也试过 ToOADate()以及 ToString()、ToShortDateString()

我还尝试将数据库设置为接受 ANSI-92 Sql

我的想法用完了。

注意:此代码设置为处理来自多个数据库的多个表,注意循环...

最佳答案

正确使用参数,不要担心您在查询中连接的日期时间值的格式。我不明白为什么要将日期时间值转换为字符串值?

DateTime theDate = new DateTime(2012,10,16);
var cmd = new OleDbCommand();
cmd.CommandText = "INSERT INTO sometable (column) VALUES (@p_bar)";
cmd.Parameters.Add ("@p_bar", OleDbType.DateTime).Value = theDate;

关于c# - 将日期时间插入 Access,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12922292/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com