当前位置:首页 > 行业动态 > 正文

c#数据库数据插入

摘要:本文主要介绍了在C#中如何进行数据库数据的插入操作,包括连接数据库、创建SQL命令以及执行插入语句等步骤。

C# 数据库数据插入是一个常见的操作,在应用程序开发中经常需要将数据保存到数据库中,以下是关于 C# 数据库数据插入的详细内容:

一、使用 SQL 语句插入数据

1、基本语法

INSERT INTO table_name (column1, column2, column3, …) VALUES (value1, value2, value3, …);

INSERT INTO Students (Name, Age, Gender) VALUES (‘Tom’, 18, ‘Male’);

2、示例代码

以下是一个使用 C# 和 SQL 语句向数据库中插入数据的简单示例:

“`csharp

string connectionString = "Data Source=server;Initial Catalog=database;User Id=user;Password=password";

SqlConnection conn = new SqlConnection(connectionString);

conn.Open();

string sql = "INSERT INTO Students (Name, Age, Gender) VALUES (@Name, @Age, @Gender)";

SqlCommand cmd = new SqlCommand(sql, conn);

cmd.Parameters.AddWithValue("@Name", "Tom");

cmd.Parameters.AddWithValue("@Age", 18);

cmd.Parameters.AddWithValue("@Gender", "Male");

int rowsAffected = cmd.ExecuteNonQuery();

conn.Close();

二、使用 SqlParameter 类插入数据
1、优点
   可以防止 SQL 注入攻击,提高数据安全性。
   便于对参数进行管理和操作。
2、示例代码
   ```csharp
     string connectionString = "Data Source=server;Initial Catalog=database;User Id=user;Password=password";
     SqlConnection conn = new SqlConnection(connectionString);
     conn.Open();
     string sql = "INSERT INTO Students (Name, Age, Gender) VALUES (@Name, @Age, @Gender)";
     SqlCommand cmd = new SqlCommand(sql, conn);
     SqlParameter nameParam = new SqlParameter("@Name", "Tom");
     SqlParameter ageParam = new SqlParameter("@Age", 18);
     SqlParameter genderParam = new SqlParameter("@Gender", "Male");
     cmd.Parameters.Add(nameParam);
     cmd.Parameters.Add(ageParam);
     cmd.Parameters.Add(genderParam);
     int rowsAffected = cmd.ExecuteNonQuery();
     conn.Close();

三、批量插入数据

1、使用 SqlBulkCopy 类

适用于大量数据的快速插入,可以提高插入效率。

示例代码:

“`csharp

string connectionString = "Data Source=server;Initial Catalog=database;User Id=user;Password=password";

SqlConnection conn = new SqlConnection(connectionString);

conn.Open();

DataTable dt = new DataTable("Students");

dt.Columns.Add("Name", typeof(string));

dt.Columns.Add("Age", typeof(int));

dt.Columns.Add("Gender", typeof(string));

for (int i = 0; i < 1000; i++)

{

DataRow dr = dt.NewRow();

dr["Name"] = "Student" + i;

dr["Age"] = 20 + i % 10;

dr["Gender"] = i % 2 == 0 ? "Male" : "Female";

dt.Rows.Add(dr);

}

SqlBulkCopy bulkCopy = new SqlBulkCopy(conn);

bulkCopy.DestinationTableName = "Students";

bulkCopy.WriteToServer(dt);

conn.Close();

2、使用存储过程
   可以先创建一个存储过程,然后在 C# 中调用该存储过程来批量插入数据。
   示例代码:
     ```csharp
       // 创建存储过程的 SQL 语句
       string createProcSql = @"CREATE PROCEDURE usp_InsertStudents
       @Students [dbo].[Student] READONLY
       AS
       BEGIN
       SET NOCOUNT ON;
       INSERT INTO Students (Name, Age, Gender)
       SELECT Name, Age, Gender FROM @Students;
       END";
       // 执行存储过程的 C# 代码
       string connectionString = "Data Source=server;Initial Catalog=database;User Id=user;Password=password";
       using (SqlConnection conn = new SqlConnection(connectionString))
       {
           conn.Open();
           SqlCommand createProcCmd = new SqlCommand(createProcSql, conn);
           createProcCmd.ExecuteNonQuery();
           DataTable dt = new DataTable("Students");
           dt.Columns.Add("Name", typeof(string));
           dt.Columns.Add("Age", typeof(int));
           dt.Columns.Add("Gender", typeof(string));
           for (int i = 0; i < 1000; i++)
           {
               DataRow dr = dt.NewRow();
               dr["Name"] = "Student" + i;
               dr["Age"] = 20 + i % 10;
               dr["Gender"] = i % 2 == 0 ? "Male" : "Female";
               dt.Rows.Add(dr);
           }
           SqlCommand procCmd = new SqlCommand("usp_InsertStudents", conn);
           procCmd.CommandType = CommandType.StoredProcedure;
           SqlParameter studentsParam = procCmd.Parameters.AddWithValue("@Students", dt);
           studentsParam.SqlDbType = SqlDbType.Structured;
           int rowsAffected = procCmd.ExecuteNonQuery();
       }

四、图片插入数据库的方法

1、准备工作

在数据库中添加一个表,表中添加字段,例如Image 字段的类型为image(不同的数据库可能有不同的类型,如varbinary(max))。

示例代码:

“`sql

CREATE TABLE Images (

Id INT PRIMARY KEY IDENTITY,

ImageData VARBINARY(MAX)

);

2、**C# 代码实现**
   ```csharp
     string connectionString = "Data Source=server;Initial Catalog=database;User Id=user;Password=password";
     using (SqlConnection conn = new SqlConnection(connectionString))
     {
         conn.Open();
         byte[] imageBytes = File.ReadAllBytes("path/to/image.jpg"); // 读取图片文件的字节数组
         string sql = "INSERT INTO Images (ImageData) VALUES (@ImageData)";
         SqlCommand cmd = new SqlCommand(sql, conn);
         cmd.Parameters.AddWithValue("@ImageData", imageBytes);
         int rowsAffected = cmd.ExecuteNonQuery();
     }

五、相关注意事项

1、连接字符串的安全性

不要在代码中硬编码连接字符串,可以使用配置文件或环境变量来存储连接字符串,并确保其安全性。

可以在Web.config 文件中配置连接字符串,然后通过ConfigurationManager.ConnectionStrings 获取。

“`xml

<configuration>

<connectionStrings>

<add name="ConnStr" connectionString="Data Source=server;Initial Catalog=database;User Id=user;Password=password" providerName="System.Data.SqlClient"/>

</connectionStrings>

</configuration>

   在 C# 代码中获取连接字符串:
     ```csharp
       string connectionString = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;

2、异常处理

在进行数据库操作时,应该使用try-catch 块来捕获和处理可能出现的异常,以提高程序的稳定性和可靠性。

“`csharp

try

{

// 数据库操作代码

}

catch (Exception ex)

{

// 记录异常日志或提示用户错误信息

Console.WriteLine("数据库操作出错:" + ex.Message);

}

六、FAQs
1、问题:如何在 C# 中连接不同类型的数据库?解答:C# 可以通过不同的数据提供程序来连接不同类型的数据库,对于 SQL Server 数据库,可以使用System.Data.SqlClient;对于 MySQL 数据库,可以使用MySql.Data.MySqlClient;对于 Oracle 数据库,可以使用System.Data.OracleClient 等,在连接字符串中指定相应的数据库服务器地址、数据库名称、用户名和密码等信息即可建立连接。
   连接 MySQL 数据库的代码如下:
     ```csharp
       string connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;";
       MySqlConnection conn = new MySqlConnection(connectionString);
       conn.Open();
       // 进行数据库操作
       conn.Close();

2、问题:如何防止 SQL 注入攻击?

解答:使用参数化查询是防止 SQL 注入攻击的有效方法,不要直接将用户输入的内容拼接到 SQL 语句中,而是使用参数占位符,并通过SqlParameter 类或其他方式为参数赋值,这样可以避免反面用户通过输入特殊的 SQL 语句来破坏数据库的完整性和安全性。