C#连接SQL Server数据库(完整代码在最后)

c#连接SQL Server数据库(完整代码在最后)

  • 安装System.Data.SqlClient包

using System.Data.SqlClient;
  • 建立连接
string connectionString = "server=localhost; database=test; uid=sa; pwd=961121";
SqlConnection connection = new SqlConnection(connectionString);
connection.Open();

server=localhost:指定服务器名称为 localhost,表示数据库服务器位于本地计算机上。localhost 是一个特殊的名称,用于指代本地主机。

database=test:指定要连接的数据库名称为 test。这意味着连接成功后,将在 test 数据库上执行数据库操作。

uid=sa:指定用户身份验证使用的用户名为 sasa 是 SQL Server 中的系统管理员账户。

pwd=961121:指定用户身份验证使用的密码为 961121

  • 添加数据
// 插入数据
static void InsertData(SqlConnection connection, string tableName, string username, string password)
{
    string insertQuery = $"INSERT INTO [{tableName}] (username, password) VALUES (@Username, @Password)";
    using (SqlCommand command = new SqlCommand(insertQuery, connection))
    {
        command.Parameters.AddWithValue("@Username", username);
        command.Parameters.AddWithValue("@Password", password);
        int rowsAffected = command.ExecuteNonQuery();
        Console.WriteLine($"{rowsAffected} 行受影响。");
    }
}

InsertData 方法用于向指定的表中插入一条新的记录。以下是该方法的详细介绍:

static void InsertData(SqlConnection connection, string tableName, string username, string password)
  • SqlConnection connection:表示已建立的到数据库的连接。
  • string tableName:表示要插入数据的目标表的名称。
  • string username:表示要插入的用户名。
  • string password:表示要插入的密码。

在方法内部,首先构建了一个 SQL 插入语句,语句的格式为:

INSERT INTO [表名] (列1, 列2, 列3, ...) VALUES (@参数1, @参数2, @参数3, ...)

在这里,[表名] 是我们传递给方法的 tableName 参数;(列1, 列2, 列3, ...) 是目标表的列名;(@参数1, @参数2, @参数3, ...) 是参数化查询的占位符。参数化查询可以防止 SQL 注入攻击,并且可以处理字符串中的特殊字符,例如单引号。

接下来,创建一个 SqlCommand 对象,它使用构建好的插入语句和数据库连接。

using (SqlCommand command = new SqlCommand(insertQuery, connection))

然后,使用 command.Parameters.AddWithValue() 方法添加参数并设置它们的值。在这里,我们将 usernamepassword 参数绑定到 SQL 查询中的 @Username@Password 参数。

command.Parameters.AddWithValue("@Username", username);
command.Parameters.AddWithValue("@Password", password);

接着,使用 ExecuteNonQuery() 方法执行 SQL 查询,并返回受影响的行数。由于这是一个插入操作,所以我们通常希望看到受影响的行数为 1。

int rowsAffected = command.ExecuteNonQuery();

最后,将受影响的行数输出到控制台,以指示插入操作的结果。

Console.WriteLine($"{rowsAffected} 行受影响。");

这样,InsertData 方法就完成了向指定表中插入新记录的操作。

  • 查询数据
// 查询数据
static void RetrieveData(SqlConnection connection, string tableName)
{
    string selectQuery = $"SELECT * FROM [{tableName}]";
    using (SqlCommand command = new SqlCommand(selectQuery, connection))
    using (SqlDataReader reader = command.ExecuteReader())
    {
        while (reader.Read())
        {
            Console.WriteLine($"username: {reader["username"]},  password: {reader["password"]}");
        }
    }
}

RetrieveData 方法用于从指定表中检索数据,并将结果输出到控制台。以下是该方法的详细介绍:

static void RetrieveData(SqlConnection connection, string tableName)
  • SqlConnection connection:表示已建立的到数据库的连接。
  • string tableName:表示要从中检索数据的目标表的名称。

在方法内部,首先构建了一个 SQL 查询语句,用于检索指定表中的所有列和行。查询语句的格式为:

SELECT * FROM [表名]

在这里,[表名] 是我们传递给方法的 tableName 参数。

接下来,创建一个 SqlCommand 对象,它使用构建好的查询语句和数据库连接。

using (SqlCommand command = new SqlCommand(selectQuery, connection))

然后,使用 command.ExecuteReader() 方法执行 SQL 查询,并返回一个 SqlDataReader 对象,该对象可以逐行读取查询结果。

using (SqlDataReader reader = command.ExecuteReader())

while 循环中,通过调用 reader.Read() 方法,逐行读取查询结果,直到没有更多的行可读。在循环内部,通过 reader["列名"] 语法,可以通过列名访问每一行中的字段值。

while (reader.Read())
{
    Console.WriteLine($"username: {reader["username"]},  password: {reader["password"]}");
}

最后,完成数据检索操作后,释放 SqlDataReaderSqlCommand 对象的资源。这是通过 using 块来实现的,在块结束时会自动调用 Dispose() 方法释放资源。

通过以上步骤,RetrieveData 方法就完成了从指定表中检索数据并输出到控制台的操作。

  • 更新数据
// 更新数据
static void UpdateData(SqlConnection connection, string tableName, string username, string newPassword)
{
    string updateQuery = $"UPDATE [{tableName}] SET password = @NewPassword WHERE username = @Username";
    using (SqlCommand command = new SqlCommand(updateQuery, connection))
    {
        command.Parameters.AddWithValue("@NewPassword", newPassword);
        command.Parameters.AddWithValue("@Username", username);
        int rowsAffected = command.ExecuteNonQuery();
        Console.WriteLine($"{rowsAffected} 行受影响。");
    }
}

UpdateData 方法用于更新指定表中的数据。以下是该方法的详细介绍:

static void UpdateData(SqlConnection connection, string tableName, string username, string newPassword)
  • SqlConnection connection:表示已建立的到数据库的连接。
  • string tableName:表示要更新数据的目标表的名称。
  • string username:表示要更新密码的用户的用户名。
  • string newPassword:表示要更新的新密码。

在方法内部,首先构建了一个 SQL 更新语句,语句的格式为:

UPDATE [表名] SET 列名 = @参数 WHERE 条件列名 = @条件参数

在这里,[表名] 是我们传递给方法的 tableName 参数;列名 是要更新的列名,这里是 password@参数 是要更新的新密码,由方法的 newPassword 参数提供;条件列名 是更新数据所依据的条件列,这里是 username@条件参数 是条件列所对应的值,由方法的 username 参数提供。

接下来,创建一个 SqlCommand 对象,它使用构建好的更新语句和数据库连接。

using (SqlCommand command = new SqlCommand(updateQuery, connection))

然后,使用 command.Parameters.AddWithValue() 方法添加参数并设置它们的值。在这里,我们将 newPasswordusername 参数绑定到 SQL 查询中的 @NewPassword@Username 参数。

command.Parameters.AddWithValue("@NewPassword", newPassword);
command.Parameters.AddWithValue("@Username", username);

接着,使用 ExecuteNonQuery() 方法执行 SQL 更新查询,并返回受影响的行数。由于这是一个更新操作,所以我们通常希望看到受影响的行数为 1。

int rowsAffected = command.ExecuteNonQuery();

最后,将受影响的行数输出到控制台,以指示更新操作的结果。

Console.WriteLine($"{rowsAffected} 行受影响。");

这样,UpdateData 方法就完成了更新指定表中数据的操作。

  • 删除数据
// 删除数据
static void DeleteData(SqlConnection connection, string tableName, string username)
{
    string deleteQuery = $"DELETE FROM [{tableName}] WHERE username = @Username";
    using (SqlCommand command = new SqlCommand(deleteQuery, connection))
    {
        command.Parameters.AddWithValue("@Username", username);
        int rowsAffected = command.ExecuteNonQuery();
        Console.WriteLine($"{rowsAffected} 行受影响。");
    }
}

DeleteData 方法用于从指定表中删除数据。以下是该方法的详细介绍:

static void DeleteData(SqlConnection connection, string tableName, string username)
  • SqlConnection connection:表示已建立的到数据库的连接。
  • string tableName:表示要删除数据的目标表的名称。
  • string username:表示要删除数据的用户名。

在方法内部,首先构建了一个 SQL 删除语句,语句的格式为:

DELETE FROM [表名] WHERE 条件列名 = @条件参数

在这里,[表名] 是我们传递给方法的 tableName 参数;条件列名 是删除数据所依据的条件列,这里是 username@条件参数 是条件列所对应的值,由方法的 username 参数提供。

接下来,创建一个 SqlCommand 对象,它使用构建好的删除语句和数据库连接。

using (SqlCommand command = new SqlCommand(deleteQuery, connection))

然后,使用 command.Parameters.AddWithValue() 方法添加参数并设置它们的值。在这里,我们将 username 参数绑定到 SQL 查询中的 @Username 参数。

command.Parameters.AddWithValue("@Username", username);

接着,使用 ExecuteNonQuery() 方法执行 SQL 删除查询,并返回受影响的行数。由于这是一个删除操作,所以我们通常希望看到受影响的行数为 1。

int rowsAffected = command.ExecuteNonQuery();

最后,将受影响的行数输出到控制台,以指示删除操作的结果。

Console.WriteLine($"{rowsAffected} 行受影响。");

这样,DeleteData 方法就完成了从指定表中删除数据的操作。

  • 完整代码
using System;
using System.Data.SqlClient;

class Program
{
    static void Main(string[] args)
    {
        string connectionString = "server=localhost; database=test; uid=sa; pwd=961121";

        // 建立连接
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            try
            {
                // 打开连接
                connection.Open();

                // 添加数据
                Console.WriteLine("1. 插入数据:");
                InsertData(connection, "user", "John", "123456");

                // 查询数据
                Console.WriteLine("\n2. 查询数据:");
                RetrieveData(connection, "user");

                // 更新数据
                Console.WriteLine("\n3. 更新数据:");
                UpdateData(connection, "user", "John", "456789");

                // 查询更新后的数据
                Console.WriteLine("\n4. 查询更新后的数据:");
                RetrieveData(connection, "user");

                // 删除数据
                Console.WriteLine("\n5. 删除数据:");
                DeleteData(connection, "user", "John");

                // 查询删除后的数据
                Console.WriteLine("\n6. 查询删除后的数据:");
                RetrieveData(connection, "user");
            }
            catch (SqlException ex)
            {
                Console.WriteLine($"SQL Error: {ex.Message}");
            }
            finally
            {
                connection.Close();
            }
        }
    }

    // 插入数据
    static void InsertData(SqlConnection connection, string tableName, string username, string password)
    {
        string insertQuery = $"INSERT INTO [{tableName}] (username, password) VALUES (@Username, @Password)";
        using (SqlCommand command = new SqlCommand(insertQuery, connection))
        {
            command.Parameters.AddWithValue("@Username", username);
            command.Parameters.AddWithValue("@Password", password);
            int rowsAffected = command.ExecuteNonQuery();
            Console.WriteLine($"{rowsAffected} 行受影响。");
        }
    }

    // 查询数据
    static void RetrieveData(SqlConnection connection, string tableName)
    {
        string selectQuery = $"SELECT * FROM [{tableName}]";
        using (SqlCommand command = new SqlCommand(selectQuery, connection))
        using (SqlDataReader reader = command.ExecuteReader())
        {
            while (reader.Read())
            {
                Console.WriteLine($"username: {reader["username"]},  password: {reader["password"]}");
            }
        }
    }

    // 更新数据
    static void UpdateData(SqlConnection connection, string tableName, string username, string newPassword)
    {
        string updateQuery = $"UPDATE [{tableName}] SET password = @NewPassword WHERE username = @Username";
        using (SqlCommand command = new SqlCommand(updateQuery, connection))
        {
            command.Parameters.AddWithValue("@NewPassword", newPassword);
            command.Parameters.AddWithValue("@Username", username);
            int rowsAffected = command.ExecuteNonQuery();
            Console.WriteLine($"{rowsAffected} 行受影响。");
        }
    }

    // 删除数据
    static void DeleteData(SqlConnection connection, string tableName, string username)
    {
        string deleteQuery = $"DELETE FROM [{tableName}] WHERE username = @Username";
        using (SqlCommand command = new SqlCommand(deleteQuery, connection))
        {
            command.Parameters.AddWithValue("@Username", username);
            int rowsAffected = command.ExecuteNonQuery();
            Console.WriteLine($"{rowsAffected} 行受影响。");
        }
    }
}

posted @   Large_Lin  阅读(4305)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示