【问题标题】:asp.net excel to database excel and access database coloumn names must be same?asp.net excel 到数据库 excel 和 access 数据库列名必须相同吗?
【发布时间】:2016-05-24 06:38:56
【问题描述】:
string b = "xa";
if (sa.HasFile)//Kullanıcı fileupload ile bir dosya seçmiş ise işlemleri gerçekleştir.
{
    if (sa.PostedFile.ContentType == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" || sa.PostedFile.ContentType == "application/vnd.ms-excel") //Sadece jpeg dosyalarını yüklenmesine izin veriyoruz.
    {
        if (sa.PostedFile.ContentLength < 1024000000) //Maksimum 1MB'lık dosyaların yüklenmesine izin veriyoruz.
        {
            string isim = Guid.NewGuid().ToString();
            //Benzersiz bir isim oluşturduk.İsimlendirme için farklı yöntemlerde kullanabilirsiniz.
            sa.SaveAs(Server.MapPath("~/App_Data/") + /*Session["kurumkodu"].ToString()*/ b + ".xlsx");
            //Sunucuda ki resimler klasörünün içerisine seçilen resmi oluşturduğumuz benzersiz isim ile kaydediyoruz.
            Label1.Text = "Dosya yüklendi";

            //Detaylı bir bilgi mesajı verdik.  
            string a = "xa";
            string Access = Server.MapPath("/App_Data/yeni.mdb");
            string Excel = Server.MapPath("~/App_Data/") + a/*Session["kurumkodu"].ToString()*/ + ".xlsx"; ;
            string connect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Excel + ";Extended Properties=Excel 12.0;HDR=NO";

            using (OleDbConnection conn = new OleDbConnection(connect))
            {
                using (OleDbCommand cmd = new OleDbCommand())
                {
                    try
                    {
                        cmd.Connection = conn;
                        cmd.CommandText = "INSERT INTO [MS Access;Database=" + Access + "].[Tablo1]  SELECT * FROM [DATA$]";
                        if (conn.State != ConnectionState.Open)
                        {
                            conn.Open();                                 
                        }
                        cmd.ExecuteNonQuery();
                        if (conn.State == ConnectionState.Open)
                        {
                            conn.Dispose();
                            conn.Close();
                        }
                        cmd.Dispose();
                        Response.Redirect("yonlendir.aspx");
                    }       
                    catch (Exception)
                    {
                        if (conn.State == ConnectionState.Open)
                        {
                            conn.Dispose();
                            conn.Close();
                        }

我上面的代码。我想让列名不能容忍excel来访问系统。这段代码有这样的错误:

列名不匹配。

没有列名怎么办?

【问题讨论】:

  • 如果插入所有数据,可以不加列名。
  • 怎么做?如何更改插入代码?
  • 您在表 [Data] 中的列是否等于 [Tablo1] 的列?
  • 是的。但是我想试试这个。如果我改变一个列名,这个代码就会成功
  • 这意味着如果你的 SQL 是 select * ,它会出错。但是如果选择fieldsName,会成功吗?如果属实,我认为是顺序问题。

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


【解决方案1】:

“我该怎么办?没有列名” 没办法。 但是你可以很容易地得到列名。使用where 1 = 0 条件打开DbDataReader 到目标表,并为此阅读器使用GetSchemaTable。它将按顺序包含所需的列名,您可以用逗号将它们连接起来,并在表名后添加此表达式:Insert into [...].[Tablename] (&lt;&lt;fieldlist&gt;&gt;) Select * From ...;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多