C#插入SQL数据库记录的常见方法


C#像SQL插入数据记录常见方法:

 一,sql数据库insert into语句:

      SQL语法:INSERT INTO table_name (column1,column2,column3,...)VALUES (value1,value2,value3,...);
      C#操作完整语句实例代码如下:

  

 string sqlinsert = "Insert Into [Test2].[dbo].[CycleTimeTable]([Line],[StationName],[BarCode],[WorkerName],[CycleTime],[StandardCT],[Date])values('" +             line + "','" + station + "','" + code + "','" + workername+ "','" + CT.ToString() + "','"+standardct.ToString() + "','" + dt.ToString() + "')";
View Code

 

     注意*:当插入的值为字符时,需要把值单引号‘’,给字段值加“[]”是为了防止有字段是保留字符(都加上准没错)

Insert Into [Test2].[dbo].[CycleTimeTable]可以替换为:use Test2 Insert Into [dbo].[CycleTimeTable],算是两种表达方法吧

         

二,用SqlParameter类来添加数据:

       表示 SqlCommand 的参数,也可以是它到 DataSet 列的映射。无法继承此类.具体的方法和属性可到此处查看:

       https://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlparameter?view=dotnet-plat-ext-5.0.

      在C#中的具体使用方法如下:

      

Sqlcon.Open();
                    string sqlinsert = "Insert Into ["+ line+ stationname + "].[dbo].[HumanErrorTable]([HumanErrorCateGory],[Line],[StationName],[BarCode],[ErrorCount],[WorkerName],[Date],[PicDescription],[ErrorImage])values" +
                        "(@HumanErrorCateGory, @StationName,@BarCode,@ErrorCount,@WorkerName,@Date,@PicDescription,@ErrorImage)";
                    SqlCommand command = new SqlCommand(sqlinsert, Sqlcon);
                    //HumanErrorCateGory
                    SqlParameter parname = new SqlParameter("@HumanErrorCateGory", SqlDbType.NVarChar);
                    parname.Value = ErrorCategory;
                    command.Parameters.Add(parname);
                    //Line
                    SqlParameter parline = new SqlParameter("@Line", SqlDbType.NVarChar);
                    parline.Value = line;
                    command.Parameters.Add(parline);
                    //StationName
                    SqlParameter parastation = new SqlParameter("@StationName", SqlDbType.NVarChar);
                    parastation.Value = stationname;
                    command.Parameters.Add(parastation);
                    //BarCode
                    SqlParameter paracode = new SqlParameter("@BarCode", SqlDbType.NVarChar);
                    paracode.Value = code;
                    command.Parameters.Add(paracode);
                    //ErrorCount
                    SqlParameter paraerrcount = new SqlParameter("@ErrorCount", SqlDbType.NVarChar);
                    paraerrcount.Value = errorcount;
                    command.Parameters.Add(paraerrcount);
                    //WorkerName
                    SqlParameter paraworker = new SqlParameter("@WorkerName", SqlDbType.NVarChar);
                    paraworker.Value = workername;
                    command.Parameters.Add(paraworker);
                    //Date
                    SqlParameter paradate = new SqlParameter("@Date", SqlDbType.DateTime);
                    paradate.Value = workername;
                    command.Parameters.Add(paradate);
                    //PicDescription
                    SqlParameter paraimgdesc = new SqlParameter("@PicDescription", SqlDbType.NText);
                    paraimgdesc.Value = workername;
                    command.Parameters.Add(paraimgdesc);
                    //imagedata
                    SqlParameter parimage = new SqlParameter("@ErrorImage", SqlDbType.Image);
                    parimage.Value = imagedata;
                    command.Parameters.Add(parimage);
View Code

三,批量插入数据库方法

        在使用数据库的时候,难免会遇到有需要大量插入数据库的项目。主要有以下几种方法:

        3.1,使用sqlBULk批量插入数据库,具体步骤和代码如下:

//第一步:先创建一个包含需求字段的表(Datatable),我用的自定义方法如下:
//为了测试,我只在表中添加了三个字段。如果需要,可以添加更多
 static DataTable GetTableSchema()
        {
            DataTable dt = new DataTable();
            dt.Columns.AddRange(new DataColumn[] 
        {
        new DataColumn("User",typeof(string)),
        new DataColumn("PassWord",typeof(string)),
        new DataColumn("AuthorityLevel",typeof(string))});
            return dt;
        }

        }
 //第二步:先把数据记录添加到DataTable dt中,然后再执行BulKInsert
 //由于没有那么多数据,这里用for循环模拟10000条数据,好像只需要200ms多就完成了
  具体代码如下:

 public void BulkInsert()
        {
            WatchDog.Reset();
            DataTable dt = GetTableSchema();
            SqlBulkCopy bulkCopy = new SqlBulkCopy(Sqlcon);
            bulkCopy.DestinationTableName = "[Test2].[dbo].[tb1]";
            bulkCopy.BatchSize = dt.Rows.Count;
            WatchDog.Start();
            //把所有的信息加入到表中
            for (int i = 0; i <998; i++)
            {
                DataRow dr = dt.NewRow();
                dr["name"] = "NameE" + i.ToString();
                dr["sex"] = "sexE" + i.ToString();
                dr["birthday"] = "birthdayE" + i.ToString();
                dr["birthplace"] = "birthplaceE" + i.ToString();
                dr["date"] = DateTime.Now;
                dt.Rows.Add(dr);
            }
            //执行插入表
            WatchDog.Start();
            bulkCopy.WriteToServer(dt);
            WatchDog.Stop();
            
        }
View Code

       3.2,使用for循环逐条插入,在使用SQL数据时,数据量比较少的时候,好像也挺快的,具体代码如下:

            SqlCommand command = new SqlCommand("", Sqlcon); ;
         
            for (int i = 0; i <= 10000; i++)
            {
                command.CommandText = "insert into [Test2].[dbo].[tb1] (name,sex,birthday,birthplace)values ('" + "name00" + i.ToString() + "', '" + "sex00" + i.ToString() + "', '" + "birthpday00" + i.ToString() + "', '" + "birthplace00" + i.ToString() + "')";
                command.ExecuteNonQuery();
            }
View Code

      3.3,把要插入的语句合并成一句,然后再一起执行插入语句,当然,速度很慢,但是也是一种方法,具体代码如下:

Sqlcon.Open();
            SqlCommand command = new SqlCommand("", Sqlcon); 
            string sql = "insert into [Test1].[dbo].[tb1] (name,sex,birthday,birthplace)values";
            string sql1 = string.Empty;
//合并插入语句
            for (int i = 0; i <= 998; i++)
            {
                sql1 += " ('" + "name0" + i.ToString() + "', '" + "sex0" + i.ToString() + "', '" + "birthpday0" + i.ToString() + "', '" + "birthplace" + i.ToString() + "')";
                if (i < 998)
                {
                    sql1 += ",";
                }
            }
            WatchDog.Start();
            command.CommandText = sql + sql1;
//一次执行
            command.ExecuteNonQuery();
            WatchDog.Stop();
            Sqlcon.Close();
//数据库用完后一定要记得关闭
View Code

 

  四,图片插入数据库的方法,方法和代码如下:

      1,先在数据数据库中添加一个表,表中添加字段,如图所示,例子中添加了5个字段,注意:存图片的变量类型为“image”

       

      2,具体代码如下:

//因为要存入的是byte数组,所以必须要有一个函数把图片转换为byte[],
//具体代码如下:
// <summary>
        /// 把图片转换为字节数组
        /// </summary>
        /// <param name="imagepath"></param>
        /// <returns></returns>
        public byte[] ReadImageByte(string imagepath)
        {
            FileStream fs = new FileStream(imagepath,FileMode.Open,FileAccess.Read);
            byte[] byte1 = new byte[fs.Length];
            fs.Read(byte1,0,Convert.ToInt32(fs.Length));
            fs.Close();
            return byte1;

        }

//选择图片,按钮事件
 /// <summary>
        /// 读取图片信息
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button8_Click(object sender, EventArgs e)
        {
            OpenFileDialog opd = new OpenFileDialog();
            opd.Filter = "*jpg|*JPG|*PNG|*png|*bmp|*BMP";
            if(opd.ShowDialog()==DialogResult.OK)
            {
                imagedata = ReadImageByte(opd.FileName);

            }
        }

//把图片插入数据库,会用到前面的插入数据数据方法(sqlparameter)

/// <summary>
        /// 把图品插入数据库
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            if(imagedata==null)
            {
                MessageBox.Show("图片为空");
                return;
            }
            try
            {
                Sqlcon.Open();
                MessageBox.Show("连接成功");
               
                string sqlinsert = "Insert Into [PersonInfo].[dbo].[Persons]([PersonName],[PersonID],[PersonSkill1],[PersonSkill2],[PersonImage]) values(@PersonName, @PersonID,@PersonSkill1,@PersonSkill2,@PersonImage)";
                SqlCommand command = new SqlCommand(sqlinsert, Sqlcon);

                SqlParameter parname = new SqlParameter("@PersonName", SqlDbType.NVarChar);
                parname.Value = "王中明";
                command.Parameters.Add(parname);


                SqlParameter parid= new SqlParameter("@PersonID", SqlDbType.NVarChar);
                parid.Value = "84149536";
                command.Parameters.Add(parid);

                SqlParameter parskill1 = new SqlParameter("@PersonSkill1", SqlDbType.NVarChar);
                parskill1.Value = "焊锡专技";
                command.Parameters.Add(parskill1);

                SqlParameter parskill2 = new SqlParameter("@PersonSkill2", SqlDbType.NVarChar);
                parskill2.Value = "焊锡专技";
                command.Parameters.Add(parskill2);


                SqlParameter parimage = new SqlParameter("@PersonImage", SqlDbType.Image);
                //imagedata可有上面的方法转换而来
                parimage.Value =imagedata;
                command.Parameters.Add(parimage);

             
                if (command.ExecuteNonQuery() > 0)
                {
                    MessageBox.Show("插入成功");
                }
            }
            catch(Exception er)
            {
                MessageBox.Show("连接失败"+er.ToString());
            }
            Sqlcon.Close();
        }
View Code

      3,既然有插入数据库中,那么必然就有要把数据库中的图像数据读取出来还原的时候,具体代码如下:

 

 /// <summary>
        /// 读取图片
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button9_Click(object sender, EventArgs e)
        {
            byte[] imagebytes=null;
            string sql = "use PersonInfo select*from Persons Where PersonName='王中明'";
          // SqlCommand command = new SqlCommand(sql,Sqlcon);
            Sqlcon.Open();
            DataTable dt = new DataTable();
            SqlDataAdapter adapt = new SqlDataAdapter(sql, Sqlcon);
            adapt.Fill(dt);
            imagebytes = (byte[])dt.Rows[0]["PersonImage"];
            //SqlDataReader DataReader = command.ExecuteReader();
            //while(DataReader.Read())
            //{
            //    imagebytes = (byte[])DataReader.GetValue(4);
            //}
            //command.Clone();
            Sqlcon.Close();
            //显示图片
            MemoryStream ms = new MemoryStream(imagebytes);
            Image image = System.Drawing.Image.FromStream(ms);
            //Bitmap bitm = new Bitmap(ms);
            pictureBox1.Image = image;
          
        }
View Code

 

 

     

 

 

     

  

       

       

      

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM