【发布时间】:2021-02-08 10:44:08
【问题描述】:
我在 Visual Studio 2019 中设计了一个 C# 桌面应用程序,并为数据库使用了 sql server express 2019 版。我正在尝试在另一台电脑上运行这个应用程序。我已经在另一台电脑上安装了 sql server express 2019,还安装了 MS server management studio 2019 并恢复了数据库。一切正常,例如登录,保存更新,删除,但是当我尝试将数据提取到 datagridview 时,它显示“system.data.sqlclient.sqlexception - 与 sql server 建立连接时发生网络相关或实例特定错误。服务器不是找到或无法访问。验证实例名称是否正确,并且 sql server 配置为允许远程连接。(提供者:sql 网络接口,错误:26 - 错误定位服务器/指定实例。"
所有端口均已启用,并且客户端电脑中的防火墙规则也已启用。
我正在使用下面的连接字符串进行连接。
class Connection
{
SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=icon;Integrated Security=True");
public SqlConnection active()
{
if (con.State == ConnectionState.Closed)
{
con.Open();
}
return con;
}
}
请帮助任何人,因为我无法解决问题所在。
下面的代码正在运行
private void loginBtn_Click(object sender, EventArgs e)
{
Connection con = new Connection();
SqlCommand cmd = new SqlCommand("select * from [user] where
Username='" + usernameTxt.Text + "'and password='" + passwordTxt.Text
+ "'", con.active());
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
sda.Fill(dt);
if (dt.Rows.Count > 0)
{
MessageBox.Show("Login Successful", "Sucsess",
MessageBoxButtons.OK, MessageBoxIcon.Information);
new dashboard().Show();
this.Hide();
}
但这不起作用。当我尝试获取数据时它显示错误。
public partial class AllSudent : Form
{
public AllSudent()
{
InitializeComponent();
}
Connection con = new Connection();
public int studentID;
private void AllSudent_Load(object sender, EventArgs e)
{
GetStudentsRecord();
}
public void GetStudentsRecord()
{
SqlCommand cmd = new SqlCommand("Select * From [student]",
con.active());
DataTable dt = new DataTable();
SqlDataReader sdr = cmd.ExecuteReader();
dt.Load(sdr);
sdataGridView.DataSource = dt;
}
【问题讨论】:
-
所以你的说法是该方法用于获取例如登录时建立连接,从用户表中选择数据可以正常工作,但是当用于获取某些网格的数据时,使用完全相同的方法,它会失败吗?发布工作和失败的代码
-
顺便说一句,您在这里使用的模式看起来不太好 - 事物的结构方式可能导致连接打开的时间超过必要的时间、耗尽池或拥有一个类关闭另一个类仍在使用的连接。您应该在
using中按需创建新连接并确保它们在完成后关闭,否则您将破坏框架中内置的所有连接管理(池),即期望以特定方式使用连接 -
嗨@CaiusJard ..我已经编辑了我面临问题的问题..还上传了数据集和所有文件图片..还建议我应该如何编写连接字符串,因为我是新手并为我的班级做一个项目。
-
"
SqlCommand cmd = new SqlCommand("select * from [user] where Username='" + usernameTxt.Text + "'and password='" + passwordTxt.Text" 这是非常危险的(是的,因为我真的在大喊大叫!)。这里有多个问题;您将密码存储为纯文本(大量问题),并且很容易注入。修复你的设计,永远不要像 parametrise 那样将值注入你的 SQL,并停止存储纯文本密码;盐和哈希它们。有人可以通过输入他们的用户名' OR 1=1;--和密码轻松进入您的系统。
标签: c# sql-server