gpt4 book ai didi

c# - 如何使用 C# 将数组的元素插入到 SQL Server 数据库中?

转载 作者:太空狗 更新时间:2023-10-30 00:24:51 27 4
gpt4 key购买 nike

我需要将天气预报(温度)插入 SQL Server 数据库,以便远程控制建筑物的供暖。

步骤是:

  1. 从 RSS 提要获取数据
  2. 将它们放在一个数组中
  3. 连接到 SQL 数据库
  4. 将元素插入 SQL 数据库

我完成了前 3 个步骤,但我坚持执行最后一个步骤。

该数组是根据 Yahoo weather 的 RSS 提要创建的。

string[,] myarray1 = new string[5, 3];

数据库列的名称是:Date, Templow, Temphigh

我现在正在尝试将这个数组的元素插入到 SQL Server 数据库中。我已经为此苦苦挣扎了几个小时,但我不知道该怎么做。我在这个网站上看了很多解决方案,但都没有成功。

我试过:

foreach (string str2 in myarray1)
{
var mycommand = new SqlCommand("INSERT INTO RSS2 VALUES(@Date, @Templow, @Temphigh)", myConnection);
mycommand.Parameters.AddWithValue("@Date", str2);
mycommand.Parameters.AddWithValue("@Templow", str2);
mycommand.Parameters.AddWithValue("@Temphigh", str2);
mycommand.ExecuteNonQuery();
}

for (k = 0; k < 5; k++)
{
SqlCommand myCommand = new SqlCommand("INSERT INTO RSS2 (Date, Templow, Temphigh)" +
"Values ('myarray1[k,0]','myarray1[k,1]','myarray1[k,2]')", myConnection);
myCommand.ExecuteNonQuery();
}

还有很多其他的...

这些解决方案都不正确。这是我在 C# 中的第一个代码(我已经习惯了 Basic),所以要宽容 ;-)

最佳答案

假设您的数据库表需要一个日期和低温和高温的两个 double 值,那么您可以在循环外构建命令及其参数,然后只需在循环内更新参数值。

var mycommand = new SqlCommand("INSERT INTO RSS2 VALUES(@Date, @Templow, @Temphigh)", 
myConnection);

mycommand.Parameters.AddWithValue("@Date", DateTime.MinValue);
mycommand.Parameters.AddWithValue("@Templow", Double.MinValue);
mycommand.Parameters.AddWithValue("@Temphigh", Double.MinValue);
for (i = 0; i < 5; i++)
{
mycommand.Parameters["@Date"].Value = Convert.ToDateTime(myArray[i,0]);
mycommand.Parameters["@Templow"].Value = Convert.ToDouble(myArray[i,1]);
mycommand.Parameters["@Temphigh"].Value = Convert.ToDouble(myArray[i,2]);
mycommand.ExecuteNonQuery();
}

另一个有趣的选择是使用 Table Valued Parameter但仅五行并不是很大的收获。相反,如果您要添加很多行,它可能会有所作为

在您的 Sql Server 数据库中,为参数创建数据类型和插入记录的存储过程

CREATE TYPE dbo.WeatherInfo AS TABLE
( infoDate smalldatetime, minTemp float, maxTemp float )

CREATE PROCEDURE usp_InsertWeatherInfo
(@tbpWeatherInfo dbo.WeatherInfo READONLY)
AS
INSERT INTO dbo.RSS2 (dateInfo, minTemp, maxTemp)
SELECT wi.dateInfo, wi.minTemp, wi.maxTemp FROM @tbpWeatherInfo AS wi

在您的 C# 代码而不是数组中创建一个包含日期、最小和最大温度的数据表并将其传递给存储过程

using (connection)
{
DataTable wiInfo = GetWeatherInfo();
SqlCommand insertCommand = new SqlCommand("usp_InsertWeatherInfo", connection);
insertCommand.CommandType = CommandType.StoredProcedure;
SqlParameter tvpParam = insertCommand.Parameters.AddWithValue("@tbpWeatherInfo", wiInfo);
tvpParam.SqlDbType = SqlDbType.Structured;
insertCommand.ExecuteNonQuery();
}

private DataTable GetWeatherInfo()
{
DataTable wi = new DataTable();
wi.Columns.Add("infoDate", typeof(DateTime));
wi.Columns.Add("minTemp", typeof(double));
wi.Columns.Add("maxTemp", typeof(double));

... loop reading aline of weather info ....
DataRow row = wi.NewRow();
wi["infoDate"] = ... datetime from line ....
wi["minTemp"] = ... minTemp from line ....
wi["maxTemp"] = ... maxTemp from line ....
wi.Rows.Add(row);
... next line
return wi;
}

关于c# - 如何使用 C# 将数组的元素插入到 SQL Server 数据库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21142288/

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