c.Open();
string columns = "(";
string values = "(";
foreach (DataGridViewColumn column in rootDataView.Columns)
{
if (virtualColumns.Contains(column.Name))
{
}
else
{
columns += column.Name + ",";
values += "@" + column.Name + " ,";
}
}
columns = columns.Substring(0, columns.Length - 1) + ")";
values = values.Substring(0, values.Length - 1) + ")";
SqlCommand command = new SqlCommand("insert into " + tableName + " " + columns + " Values " + values, c);
foreach (DataGridViewColumn column in rootDataView.Columns)
{
if (virtualColumns.Contains(column.Name))
{
}
else
{
if (column.Name != "timeFrom")
{
command.Parameters.AddWithValue("@" + column.Name, editedRow.Cells[column.Name].Value);
}
else
{
command.Parameters.AddWithValue("@" + column.Name, System.DateTime.Now);
}
}
}
command.ExecuteNonQuery();
但我在这一行遇到了问题
command.Parameters.AddWithValue("@" + column.Name, System.DateTime.Now);
我需要将此时间与SQL服务器同步,因此我需要以某种方式将GETDATE()
作为参数传递,但是当我像这样输入
command.Parameters.AddWithValue("@" + column.Name, "GetDate()");
它以字符串/ varchar的形式发送,因此它不会调用函数。
我想知道是否有办法将函数作为参数传递,或者我是否需要替换查询字符串的@timeFrom
部分。
编辑:请注意粗体部分,这是问题 - 我要求是/否和解释原因
答案 0 :(得分:2)
你必须尝试这样的事情:
c.Open();
string columns = "(";
string values = "(";
foreach (DataGridViewColumn column in rootDataView.Columns)
{
if (virtualColumns.Contains(column.Name))
{
}
else
{
columns += column.Name + ",";
if (column.Name != "timeFrom")
{
values += "@" + column.Name + " ,";
} else {
//change in string
values += "GETDATE() ,";
}
}
}
columns = columns.Substring(0, columns.Length - 1) + ")";
values = values.Substring(0, values.Length - 1) + ")";
SqlCommand command = new SqlCommand("insert into " + tableName + " " + columns + " Values " + values, c);
foreach (DataGridViewColumn column in rootDataView.Columns)
{
if (virtualColumns.Contains(column.Name))
{
}
else
{
if (column.Name != "timeFrom")
{
command.Parameters.AddWithValue("@" + column.Name, editedRow.Cells[column.Name].Value);
}
}
}
command.ExecuteNonQuery();
基本上,您不会将timeFrom视为参数,而是使用GETDATE()在INSERT中设置它的值。
SQL Server和您使用的客户端库不支持传递包含SQL的参数。这就是为什么这个结构不起作用的原因:
command.Parameters.AddWithValue("@" + column.Name, "GetDate()");
允许在AddWithValue中传递的唯一内容是将转换为文字SQL值。