繁体   English   中英

使用asp.net将数据从Excel导入到SQL

[英]import data from excel to sql using asp.net

当我将数据从Excel导入到sql循环时,当列为空时不要停止,我该怎么做。

这是我的代码:-

protected void insertdata_Click(object sender, EventArgs e)
{
        OleDbConnection oledbConn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Server.MapPath("test4.xlsx") + ";Extended Properties=Excel 12.0;");
        try
        {
            OleDbCommand ocmd = new OleDbCommand("select [Notifications],[ReqStart],[Type],[ReqTime],[OrderNum],[FuncLoc],[CustomerCode],[CustomerName],[Rg],[city],[Phone],[Street],[Distrit] from [Sheet1$]", oledbConn);
            oledbConn.Open();
            OleDbDataReader odr = ocmd.ExecuteReader();

            string Notifications = "";
            string ReqStart = " ";
            string Type = " ";
            string ReqTime = " ";
            string OrderNum = " ";
            string FuncLoc = " ";
            string CustomerCode = " ";
            string CustomerName = " ";
            string Rg = " ";
            string city = " ";
            string Phone = " ";
            string Street = " ";
            string Distrit = " "; 


            while (odr.Read())
            {
                Notifications = valid(odr, 0);
                ReqStart = valid(odr, 1);
                Type = valid(odr, 2);
                ReqTime = valid(odr, 3);
                OrderNum = valid(odr, 4);
                FuncLoc = valid(odr, 5);
                CustomerCode = valid(odr, 6);
                CustomerName = valid(odr, 7);
                Rg = valid(odr, 8);
                city = valid(odr, 9);
                Phone = valid(odr, 10);
                Street = valid(odr, 11);
                Distrit = valid(odr, 12);

                insertdataintosql(Notifications, ReqStart, Type, ReqTime, OrderNum, FuncLoc, CustomerCode, CustomerName, Rg, city, Phone, Street, Distrit);

            }
            oledbConn.Close();

        }
        catch(DataException ex)
        {
            lblmssg.Text = ex.Message;
            lblmssg.ForeColor = System.Drawing.Color.Red;
        }
        finally
        {
            lblmssg.Text = "Data Inserted Sucessfully";
            lblmssg.ForeColor = System.Drawing.Color.Green;
        }
    }

    protected string valid(OleDbDataReader myreader, int stval)
    {
        object val = myreader[stval];
        if (val != DBNull.Value)
        {
            return val.ToString();
        }
        else
        {
            return Convert.ToString(0);
        }
    }

    public void insertdataintosql(string Notifications, string ReqStart, string Type, string ReqTime, string OrderNum, string FuncLoc, string CustomerCode, string CustomerName, string Rg, string city, string Phone, string Street, string Distrit)
    {
        SqlConnection sqlconn = new SqlConnection("Data Source=.;Initial Catalog=White_Whale;Integrated Security=True");


        using (SqlCommand cmd=new SqlCommand())
        {
            cmd.Connection = sqlconn;
            cmd.CommandText = "insert into Customers(customer_code,customer_name,RgCode,CityCode,Phone,Distriet,Street) values(@customer_code,@customer_name,@RgCode,@CityCode,@Phone,@Distriet,@Street)";
            cmd.Parameters.Add("@customer_code", SqlDbType.VarChar, 20).Value = CustomerCode;
            cmd.Parameters.Add("@customer_name", SqlDbType.VarChar, 100).Value = CustomerName;
            cmd.Parameters.Add("@RgCode", SqlDbType.Int).Value = Convert.ToInt32(Rg);
            cmd.Parameters.Add("@CityCode", SqlDbType.Int).Value = Convert.ToInt32(city);
            cmd.Parameters.Add("@Phone", SqlDbType.VarChar, 12).Value = Phone;
            cmd.Parameters.Add("@Distriet", SqlDbType.VarChar, 12).Value = Distrit;
            cmd.Parameters.Add("@Street", SqlDbType.NVarChar, 100).Value = Street;
            cmd.CommandType = CommandType.Text;
            sqlconn.Open();
            cmd.ExecuteNonQuery();
            sqlconn.Close();
        }

        using (SqlCommand cmd = new SqlCommand())
        {
            cmd.Connection = sqlconn;
            cmd.CommandText = "insert into Notification(notification,type_code,order_Num,funLoc_Code,customer_code) values (@notification,@type_code,@order_Num,@funLoc_Code,@customer_code)";
            cmd.Parameters.Add("@notification", SqlDbType.VarChar,30).Value = Notifications;

            //cmd.Parameters.Add("@req_start", SqlDbType.Date).Value = DateTime.ParseExact(ReqStart,"dd-MM-yyyy",null);
            cmd.Parameters.Add("@type_code", SqlDbType.Int).Value = Convert.ToInt32(Type);
            //cmd.Parameters.Add("@ReqTime", SqlDbType.Bit).Value = ReqTime;
            cmd.Parameters.Add("@order_Num", SqlDbType.VarChar, 30).Value = OrderNum;
            cmd.Parameters.Add("@funLoc_Code", SqlDbType.Int).Value = Convert.ToInt32(OrderNum);
            cmd.Parameters.Add("@customer_code", SqlDbType.VarChar, 20).Value = CustomerCode;
            cmd.CommandType = CommandType.Text;
            sqlconn.Open();
            cmd.ExecuteNonQuery();
            sqlconn.Close();
        }

    }
}

您可以做的一件事是创建一个对象数组,该对象数组等于电子表格中的列数,然后使用LINQ检查所有这些值是否均为DBNull

object[] dataTest = new object[colCount];
If (dataTest.All(x => x == DBNull.Value))
    break;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM