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

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

时间:2024-03-01 17:44:42浏览次数:29  
标签:username string C# tableName Server connection command SQL SqlCommand

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} 行受影响。");
        }
    }
}

标签:username,string,C#,tableName,Server,connection,command,SQL,SqlCommand
From: https://www.cnblogs.com/LargeLin/p/18047606

相关文章

  • Collapsing Strings
    做这道题目的时候学CDQ和整体二分学成傻逼了是吧?我寻思着非要把一整个数组传进去操作,明明一个一个考虑不就好了真的烦躁题外话,做这道题目的时候,探索出来一个东西,vector要放字符串的话,template可以写char*最开始的想法是编写一个函数work(vector<char*>a,vector<char*>b),然......
  • 再见CSDN,你好博客园
    许久没有写过博客了,上一篇是2021年5月,也许是没有学习没有输入,所以也就没有收获没有输出吧。近来对Docker部署应用项目感兴趣,在B站跟着视频折腾了几个,也因此看到了一个推荐的视频:程序员都用过的博客园,弹尽粮绝、命悬一线,要坚持不下去了。平常搜索解决问题的过程中也会看CSDN、博......
  • tomcat白名单(八)SNI小结
    继tomcat白名单(五)其他  四层七层浏览器(客户端)dns解析connectip在clientHello中用浏览器地址栏host塞入sni在http头中塞入Host头网关(服务端)根据SNI路由根据Host头路由 hauqi,openshift根据SNI路由passthrough的tcp流量所以openshift必然会通过某种......
  • Cesium 事件监听
    viewer=window.map=newCesium.Viewer('mapView',{animation:false,//是否创建动画小器件,左下角仪表baseLayerPicker:false,//是否显示图层选择器fullscreenButton:false,//是否显示全屏按钮geocoder:false,//是否显示geocoder小器件,右上角查询......
  • C# NamedPipe传输测试
    CancellationTokenSourcects=newCancellationTokenSource();CancellationTokentoken=cts.Token;Tasktserver=Task.Run(()=>{ NamedPipeServerserver=newNamedPipeServer(); server.dowork(token); });Tasktclient=Task.Run(()=>{ Named......
  • Linux screen命令的用法
    当谈到在Linux终端中管理会话时,screen是一个非常有用的工具。它允许你在单个终端会话中创建多个虚拟终端,从而可以同时运行多个任务,即使在断开与服务器的连接后也可以保持这些会话。下面是关于screen命令的详细介绍:1.安装和启动screen:通常,screen已经预装在大多数Linux发行版......
  • 去除tinymce中粘贴的样式
    import"tinymce/plugins/paste";tinymce.init({...其他配置,plugins:["paste"],paste_auto_cleanup_on_paste:true,paste_remove_styles:true,paste_remove_styles_if_webkit:true,paste_strip_class_attributes:true,paste_as_tex......
  • 【HMS Core】应用内支付如何退款
    ​【问题描述】应用内支付如何退款? 【解决方案】1、如果您需要帮助用户进行退款(订单退款)操作,建议提单咨询https://developer.huawei.com/consumer/cn/support/feedback/#/2、如果订阅想退款的,可以直接调用撤销订阅或者返还订阅费用来给用户退款。​​https://developer.h......
  • 实战2-__jsl_clearance_s 生成
    目标网站aHR0cHM6Ly96cnp5aGdoai5oZWZlaS5nb3YuY24veHd6eC9ic2R0L2luZGV4Lmh0bWw=1.简单介绍加速乐是创宇推出的一款在线免费网站CDN加速、网站安全防护平台,致力于系统化解决网站访问速度过慢及网站反黑客问题加速乐三步骤a.第一次请求,响应码521,服务器返回的Cookie中携带......
  • 【Serverless】云存储新建账号无法创建存储实例解决方案
    ​ 【问题描述】一些开发者想要使用AGC云存储服务,在开通服务后,需要创建一个存储实例,但是在点击创建按钮时,出现了未知错误的报错提示,创建失败。​【解决方案】获取到了开发者的浏览器报错日志后,发现了在创建Bucket时返回了“138012:invokeqmserror”的错误。​​随后在咨询......