gpt4 book ai didi

c# - 使用 C# 将默认值插入 SQL Server

转载 作者:太空狗 更新时间:2023-10-30 01:06:37 25 4
gpt4 key购买 nike

如何将存储在 string[] 中的值INSERT 到 SQL Server 中,以便忽略某些值以支持存储在 SQL 中的值服务器作为表的默认约束?我需要传递什么(例如 NULL 或其他东西)才能使用这些默认值?

目前,我在我的代码中添加了所有默认值,而且它变得越来越庞大。

下面是我的代码:

if (value == "") value = "0";

string insert = "INSERT INTO " + table + " (" + columns + ") VALUES (" + atColumns + ")";

using (SqlConnection connect = new SqlConnection(connection))
{
using (SqlCommand command = new SqlCommand(insert, connect))
{
//adds values to corresponding parameters
for (int i = 0; i < table_cols.Length; i++)
{
command.Parameters.AddWithValue("@" + table_cols[i], table_vals[i]);
}

foreach (SqlParameter Parameter in command.Parameters)
{
if (Convert.ToString(Parameter.Value) == "")
{
Parameter.Value = DBNull.Value;
}
}

connect.Open();
command.ExecuteNonQuery();
response = "Success";
return response;

如果特定的 Parameter.Value 不是空的并且有一个由 SQL Server 设置的默认值,则此代码将不适用于空值。

在 SQL Server 中,这通过省略插入语句中的值来处理(此省略会触发插入表的默认值,而提供 null 会产生错误)。

最佳答案

如果您希望 SQL Server 对列使用默认值约束,则不要将该列作为插入参数的一部分。

例子:

--From SQL Server
CREATE TABLE Orders
(
Id INT IDENTITY PRIMARY KEY
,Amount INT NOT NULL
,Cost MONEY NOT NULL
,SaleDate DATE NOT NULL DEFAULT GETUTCDATE()
);



//From C#
public int Insert(decimal cost, int amount)
{
using (var connection = new SqlConnection(connectionString))
{
var command = connection.CreateCommand();
//Don't specify the SaleDate and it will insert the current time
command.CommandText = "INSERT INTO Orders(Amount, Cost) VALUES(@Amount, @Cost); SELECT SCOPE_IDENTITY();";
command.Parameters.AddWithValue("@Amount", amount);
command.Parameters.AddWithValue("@Cost", cost);

using(var reader = command.ExecuteReader())
{
if(reader.Read())
return Convert.ToInt32(reader[0]);
}
}

return 0;
}

如果您想在 C# 代码中使用参数列表,则只需将参数名称与它们的值分组,如果值为 null 并且它具有默认值,则跳过它。

关于c# - 使用 C# 将默认值插入 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14882857/

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