【问题标题】:asp.net inserting data into SQL Server db in while loopasp.net在while循环中将数据插入SQL Server db
【发布时间】:2012-03-24 06:45:46
【问题描述】:

我想将 Excel 工作表中的数据导入 SQL Server 数据库 (2008)。我已经成功测试了从 xls 文件中获取数据的代码。但是,我无法将这些数据插入到 db 表中。以下是部分代码:

        while (ctecka.Read())
        {
            exJmeno = ctecka[0].ToString();
            exPrijmeni = ctecka[1].ToString();
            Response.Write(exJmeno + " " + exPrijmeni + " ");
            pridano = vlozSQL.ExecuteNonQuery();
        }

ctecka 是 DbDataReader 对象,它包含来自 excel 工作表的数据

exJmenoexPrijmeni 是字符串,列中的数据插入其中

问题:

Response.write 将我需要的数据写入页面

vlozSQL.ExecuteNonQuery 忽略(exJmeno 和 exPrijmeni)中的数据,并将空列插入数据库中的表中

这里有一些定义:

string InsertSQL = "INSERT INTO users (name, surname) VALUES (@name,@surname)";
vlozSQL.Parameters.AddWithValue("@name", exJmeno);
vlozSQL.Parameters.AddWithValue("@surname", exPrijmeni);

编辑

    string exJmeno = "";
    string exPrijmeni = "";
    string InsertSQL = "INSERT INTO users (name, surname) VALUES (@name,@surname)";
    SqlConnection sqlconn = new SqlConnection(SQLpripoj);
    SqlCommand vlozSQL = new SqlCommand(InsertSQL, sqlconn);
    vlozSQL.Parameters.AddWithValue("@name", exJmeno);
    vlozSQL.Parameters.AddWithValue("@surname", exPrijmeni);

    try
    {
        spojeni.Open();
        DbDataReader ctecka = prikaz.ExecuteReader();

        sqlconn.Open();
        while (ctecka.Read())
        {
            exJmeno = ctecka[0].ToString();
            exPrijmeni = ctecka[1].ToString();
            Response.Write(exJmeno + " " + exPrijmeni + " ");
            pridano = vlozSQL.ExecuteNonQuery();
        }
    }
    finally
    {
        spojeni.Close();
        sqlconn.Close();
        Label2.Text = pridano.ToString();
    }

【问题讨论】:

  • 我们需要看更多的代码来理解是怎么回事,尤其是SqlClient代码。

标签: c# asp.net sql-server import


【解决方案1】:

由于字符串在 C# 中是不可变的,因此您在循环中的分配实际上不会更改参数,您必须每次都添加它们。您需要执行以下操作;

while (ctecka.Read())
{
    exJmeno = ctecka[0].ToString();
    exPrijmeni = ctecka[1].ToString();
    Response.Write(exJmeno + " " + exPrijmeni + " ");
    vlozSQL.Parameters.Clear();
    vlozSQL.Parameters.AddWithValue("@name", exJmeno);
    vlozSQL.Parameters.AddWithValue("@surname", exPrijmeni);
    pridano = vlozSQL.ExecuteNonQuery();
}

【讨论】:

    【解决方案2】:

    在while循环中移动这部分代码

    vlozSQL.Parameters.AddWithValue("@name", exJmeno);
    vlozSQL.Parameters.AddWithValue("@surname", exPrijmeni);
    

    例如:

    while (ctecka.Read())
        {
            exJmeno = ctecka[0].ToString();
            exPrijmeni = ctecka[1].ToString();
            vlozSQL.Parameters.AddWithValue("@name", exJmeno);
             vlozSQL.Parameters.AddWithValue("@surname", exPrijmeni);
            Response.Write(exJmeno + " " + exPrijmeni + " ");
            pridano = vlozSQL.ExecuteNonQuery();
        }
    

    【讨论】:

    • 感谢回复,但是行 vlozSQL.Parameters.Clear();是必不可少的(约阿希姆·伊萨克森)
    猜你喜欢
    • 1970-01-01
    • 2017-11-17
    • 2018-01-10
    • 1970-01-01
    • 2020-03-01
    • 2020-05-13
    • 2018-03-09
    • 1970-01-01
    • 2018-10-28
    相关资源
    最近更新 更多