小白请教一个逻辑问题!

小小_明 2020-11-05 10:20:22



try
{
String connetStr = "server=" + textBox1.Text + ";" +
"port=" + textBox2.Text + ";" +
"user=" + textBox4.Text + ";" +
"password=" + textBox5.Text + ";" +
" database=" + textBox3.Text + "; ";
MySqlConnection conn = new MySqlConnection(connetStr);
conn.Open();
if (ConnectionState.Open == conn.State)
{
label16.Text = "sql连接状态:连接成功"; //设置Text属性
textBox1.ReadOnly = true;
textBox2.ReadOnly = true;
textBox3.ReadOnly = true;
textBox4.ReadOnly = true;
textBox5.ReadOnly = true;
button4.Enabled = false;
}
else
{
MessageBox.Show("数据库已关闭");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}


这一段代码我是直接写在了连接那个button里面

我的思路就是
1.连接之后 几个输入框和连接按钮都变为不可输入和不可点击
2.当点击断开连接按钮之后才会变为可输入和连接按钮可点击
写到这里我发现一个问题,我在连接按钮里面直接加入conn.Close(); 这一句会显示conn没定义。
个人想法就是 按道理说目前已经数据库连接上了,在断开连接的button里加入conn.Close();应该就行了呀!

然后不知道如何进行下一步了!希望各位大神指点一下!
...全文
11487 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
小小_明 2020-11-09
  • 打赏
  • 举报
回复
已经全部搞定了,谢谢各位大佬的回复!
datafansbj 2020-11-09
  • 打赏
  • 举报
回复
引用 4 楼 weixin_43669653 的回复:
[quote=引用 1 楼 datafansbj 的回复:]你是在连接事件里定义的 conn,它是局部变量,作用域仅限连接按钮事件,在断开按钮事件中不可用。你可以将 conn 定义在外面,这样两个按钮都能使用这个 conn。例如:

private MySqlConnection conn = null;
button连接_Click()
{
conn = new ......
conn.open();
....
}

button断开_Click()
{
conn.close();
}


请教一下 我这里又报错了。
点击断开按钮的时候 报错 conn.Close();
System.NullReferenceException:“未将对象引用设置到对象的实例。”

我全局变量是写了
private MySqlConnection conn = null;
public string connetStr ="";


然后点击连接的时候写的是
try
{
string connetStr = "server=" + textBox1txt + ";" +
"port=" + textBox2txt + ";" +
"user=" + textBox4txt + ";" +
"password=" + textBox5txt + ";" +
" database=" + textBox3txt + "; ";
MySqlConnection conn = new MySqlConnection(connetStr);
conn.Open();
if (ConnectionState.Open == conn.State)
{
label16.Text = "sql连接状态:连接成功"; //设置Text属性
textBox1.ReadOnly = true;
textBox2.ReadOnly = true;
textBox3.ReadOnly = true;
textBox4.ReadOnly = true;
textBox5.ReadOnly = true;
button4.Enabled = false;
}
else
{
MessageBox.Show("数据库已关闭");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}




[/quote]

看红色部分,既然 conn 都定义成公有的了,为嘛还要重新定义一个同名的局部变量呢?如果局部变量与公有变量同名,编译器优先使用局部变量,公有变量被暂时屏蔽。改为如下即可:
conn = new MySqlConnection(connetStr);
six2me 2020-11-07
  • 打赏
  • 举报
回复
另外你的断开函数也应该如下:if(conn!=null) conn.close();
six2me 2020-11-07
  • 打赏
  • 举报
回复
连接按钮的函数中MySqlConnection conn = new MySqlConnection(connetStr); 修改为conn = new MySqlConnection(connetStr);
好几只小萝莉 2020-11-07
  • 打赏
  • 举报
回复
1、代码块与变量作用域的知识好好回顾一下。 2、对象实例化之后再使用,无法保证是否实例化的场景下,也要应该做判断。 老码农的忠告:基础知识非常重要
小小_明 2020-11-06
  • 打赏
  • 举报
回复
小小_明 2020-11-06
  • 打赏
  • 举报
回复
引用 1 楼 datafansbj 的回复:
你是在连接事件里定义的 conn,它是局部变量,作用域仅限连接按钮事件,在断开按钮事件中不可用。你可以将 conn 定义在外面,这样两个按钮都能使用这个 conn。例如: private MySqlConnection conn = null; button连接_Click() { conn = new ...... conn.open(); .... } button断开_Click() { conn.close(); }
请教一下 我这里又报错了。 点击断开按钮的时候 报错 conn.Close(); System.NullReferenceException:“未将对象引用设置到对象的实例。” 我全局变量是写了 private MySqlConnection conn = null; public string connetStr =""; 然后点击连接的时候写的是 try { string connetStr = "server=" + textBox1txt + ";" + "port=" + textBox2txt + ";" + "user=" + textBox4txt + ";" + "password=" + textBox5txt + ";" + " database=" + textBox3txt + "; "; MySqlConnection conn = new MySqlConnection(connetStr); conn.Open(); if (ConnectionState.Open == conn.State) { label16.Text = "sql连接状态:连接成功"; //设置Text属性 textBox1.ReadOnly = true; textBox2.ReadOnly = true; textBox3.ReadOnly = true; textBox4.ReadOnly = true; textBox5.ReadOnly = true; button4.Enabled = false; } else { MessageBox.Show("数据库已关闭"); } } catch (Exception ex) { MessageBox.Show(ex.Message); }
小小_明 2020-11-05
  • 打赏
  • 举报
回复
引用 1 楼 datafansbj 的回复:
你是在连接事件里定义的 conn,它是局部变量,作用域仅限连接按钮事件,在断开按钮事件中不可用。你可以将 conn 定义在外面,这样两个按钮都能使用这个 conn。例如: private MySqlConnection conn = null; button连接_Click() { conn = new ...... conn.open(); .... } button断开_Click() { conn.close(); }
万分感谢。区区几句话解决了玩的困扰!
独立观察员 2020-11-05
  • 打赏
  • 举报
回复
MySqlConnection conn 写在方法外面,作为类的成员。 另外,建议使用 WPF 吧,这些按钮状态绑定一个变量就行了。
datafansbj 2020-11-05
  • 打赏
  • 举报
回复
你是在连接事件里定义的 conn,它是局部变量,作用域仅限连接按钮事件,在断开按钮事件中不可用。你可以将 conn 定义在外面,这样两个按钮都能使用这个 conn。例如:

private MySqlConnection conn = null;
button连接_Click()
{
conn = new ......
conn.open();
....
}

button断开_Click()
{
conn.close();
}

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧