C# 在一个SqlConnection中打开两个SqlDataReader

本文介绍了如何在C#的ADO.Net中通过设置连接串的MultipleActiveResultSets属性为True,实现一个SqlConnection对象同时打开并操作两个不同的SqlDataReader实例,演示了SQL查询和数据读取的高效流程。

在C#的ADO.Net中可以通过设置连接串的MultipleActiveResultSets属性为True

来允许一个SqlConnection中打开两个SqlDataReader

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;

namespace 一个连接可以打开多个SqlDataReader
{
    class Program
    {
        static void Main(string[] args)
        {
            SqlConnectionStringBuilder sb = new SqlConnectionStringBuilder();
            sb.DataSource = "192.168.8.249";
            sb.InitialCatalog = "PA";
            sb.UserID = "sa";
            sb.Password = "kicpassword";
            sb.MultipleActiveResultSets = true;      //通过这个属性设置一个连接可以打开多个DataReader

            string _conStr = sb.ConnectionString;
            string _sql = "SELECT TOP 10 BatchID,BatchNo,BoxNo,importTime FROM dbo.M_Batch01 where isreturn=0 order by BatchID";

            using (SqlConnection _conn = new SqlConnection(_conStr))
            {
                using (SqlCommand _cmd = new SqlCommand(_sql, _conn))
                {
                    _conn.Open();
                    using (SqlDataReader reader1 = _cmd.ExecuteReader())
                    {
                        if (reader1.HasRows)
                        {
                            while (reader1.Read())
                            {
                                for (int i = 0; i < reader1.FieldCount; i++)
                                {
                                    Console.Write(reader1[i].ToString()+"\t");
                                }
                                Console.WriteLine();


                                //打开第二个Reader,必须要重新New一个SqlCommand
                                _sql = "SELECT TOP 10 * FROM dbo.D_ListBoxValues";
                                using (SqlCommand _cmd1 = new SqlCommand(_sql, _conn))
                                {
                                    using (SqlDataReader reader2 = _cmd1.ExecuteReader())
                                    {
                                        if (reader1.HasRows)
                                        {
                                            while (reader2.Read())
                                            {
                                                for (int j = 0; j < reader2.FieldCount; j++)
                                                {
                                                    Console.Write(reader2[j].ToString() + "\t");
                                                }
                                                Console.WriteLine();
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }

            Console.ReadLine();
        }
    }
}

首先,你需要在数据库中创建一个用户表来存储用户信息,例如用户名、密码和其他相关信息。然后,你需要编写一个登陆窗口和主窗口的代码。 在登陆窗口中,你需要编写代码来验证用户输入的用户名和密码是否正确。如果正确,你可以将用户的信息存储在一个变量中,并在主窗口中使用这些信息。 在主窗口中,你可以根据用户的信息从数据库中检索相关的数据,并在窗口中显示这些数据。以下是一个简单的示例代码: ``` // 登陆窗口代码 private void btnLogin_Click(object sender, EventArgs e) { string username = txtUsername.Text; string password = txtPassword.Text; // 连接数据库并查询用户信息 string connectionString = "Data Source=YOUR_DATABASE_SERVER;Initial Catalog=YOUR_DATABASE_NAME;Integrated Security=True"; string query = "SELECT * FROM Users WHERE Username='" + username + "' AND Password='" + password + "'"; SqlConnection connection = new SqlConnection(connectionString); SqlCommand command = new SqlCommand(query, connection); connection.Open(); SqlDataReader reader = command.ExecuteReader(); // 如果用户存在,则保存用户信息并打开主窗口 if (reader.HasRows) { reader.Read(); int userId = reader.GetInt32(0); string userFullName = reader.GetString(1); // 保存用户信息到变量中 User currentUser = new User(userId, username, userFullName); // 打开主窗口,并传递用户信息 MainForm mainForm = new MainForm(currentUser); mainForm.Show(); this.Hide(); } else { MessageBox.Show("Invalid username or password"); } reader.Close(); connection.Close(); } // 主窗口代码 public partial class MainForm : Form { private User currentUser; public MainForm(User user) { InitializeComponent(); // 保存当前用户信息 currentUser = user; // 根据用户信息从数据库中检索相关数据 string connectionString = "Data Source=YOUR_DATABASE_SERVER;Initial Catalog=YOUR_DATABASE_NAME;Integrated Security=True"; string query = "SELECT * FROM UserData WHERE UserId=" + currentUser.Id; SqlConnection connection = new SqlConnection(connectionString); SqlCommand command = new SqlCommand(query, connection); connection.Open(); SqlDataReader reader = command.ExecuteReader(); // 在窗口中显示相关数据 if (reader.HasRows) { reader.Read(); string userData = reader.GetString(1); txtData.Text = userData; } reader.Close(); connection.Close(); } } // 用户类 public class User { public int Id { get; set; } public string Username { get; set; } public string FullName { get; set; } public User(int id, string username, string fullName) { Id = id; Username = username; FullName = fullName; } } ``` 在这个示例代码中,我们假设用户表中有两个列:Id、Username、Password和FullName。我们还假设UserData表中有两个列:UserId和Data。 在登陆窗口中,我们首先获取用户输入的用户名和密码,并使用这些信息查询用户表。如果用户存在,则我们将其信息存储在一个User对象中,并打开主窗口。否则,我们显示一个错误消息。 在主窗口中,我们首先在构造函数中保存当前用户信息。然后,我们使用这些信息从数据库中检索UserData表中的相关数据,并在窗口中显示它。 请注意,这只是一个简单的示例代码,你需要根据你的特定需求进行修改。还要注意安全性问题,例如使用参数化查询来防止SQL注入攻击。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值