【问题标题】:How to import MDB file, read and save in SQL如何在SQL中导入MDB文件、读取和保存
【发布时间】:2014-02-07 12:20:12
【问题描述】:

我需要导入 .MDB 文件,在 SQL Server 中读取并保存。 我试过这个:

方法导入

protected void Btn_Importar(object sender, EventArgs e)
{
    if (FileUpload1.HasFile)
        {
            if (FileUpload1.PostedFile.ContentType == "application/msaccess")
            {
                    string filename = Path.GetFileName(FileUpload1.FileName);
                    FileUpload1.SaveAs(Server.MapPath("~/Upload/") + filename);
                    Label1.Text = "File uploaded successfully!";
                    //ReadMdb();
                    Insert();
            }
    }
}

方法插入

public void Insert()
{
        string strFile = Server.MapPath("~/Upload/teste.mdb");
        string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strFile;
        var myDataTable = new DataTable();
        using (var connection = new OleDbConnection("Provider=Microsoft.JET.OLEDB.4.0;" + "data source=" + strFile))
        {
            connection.Open();
                var query = "SELECT * FROM BOLETO";
                var command = new OleDbCommand(query, connection);
                var reader = command.ExecuteReader();

                Conexaocs con = new Conexaocs();
                con.Conexao();

                SqlCommand sqlComm = new SqlCommand("INSERT INTO BOLETO (CODIGO,NF_CONTA,TEXTO) VALUES (@CODIGO, @NF_CONTA, @TEXTO)", conn);

                //if (reader.HasRows)
                //{
                //    while (reader.Read())
                //    {
                //        //ListBox1.Items.Add(reader.GetInt32(0).ToString() + " - " + reader.GetString(1));
                //    }

                for (int i = 0; i < reader.FieldCount; i++)
                {
                    sqlComm.Parameters.AddWithValue("@CODIGO", reader[i]);
                        sqlComm.Parameters.AddWithValue("@NF_CONTA", reader[i]);
                        sqlComm.Parameters.AddWithValue("@TEXTO", reader[i]);
                        sqlComm.ExecuteNonQuery();
                }

                connection.Close();
        }
}

但是,到了这个地步不救了!

for (int i = 0; i < reader.FieldCount; i++)
{
   sqlComm.Parameters.AddWithValue("@CODIGO", reader[i]);
   sqlComm.Parameters.AddWithValue("@NF_CONTA", reader[i]);
   sqlComm.Parameters.AddWithValue("@TEXTO", reader[i]);
   sqlComm.ExecuteNonQuery();

}

消息错误: System.InvalidOperationException:行或列没有数据

有什么想法吗?谢谢

【问题讨论】:

    标签: c# asp.net sql ms-access


    【解决方案1】:

    正如 Gord Thompson 所说,您需要遍历行,而不是字段。尝试以下(未经测试的)代码:

    if (reader.HasRows)
    {
        while (reader.Read())
        {
            sqlComm.Parameters.AddWithValue("@CODIGO", reader[0]);
            sqlComm.Parameters.AddWithValue("@NF_CONTA", reader[1]);
            sqlComm.Parameters.AddWithValue("@TEXTO", reader[2]);
            sqlComm.ExecuteNonQuery();
        }
    }
    

    【讨论】:

      【解决方案2】:

      Não existem dados para a linha ou coluna

      显然是指

      行或列没有数据

      您打开了OleDbDataReader,但您没有从中打开Read()。 (您曾做过一次,但 while 循环已被注释掉。)

      【讨论】:

        猜你喜欢
        • 2010-09-27
        • 2019-11-10
        • 2020-02-29
        • 1970-01-01
        • 2021-08-17
        • 1970-01-01
        • 2021-12-14
        • 2012-06-04
        • 2022-01-14
        相关资源
        最近更新 更多