C#中调用方法传递参数后如何接收返回的结果?
如何从第二个方法返回结果给第一个方法?
嘿,其实你已经给CheckDatabase方法定义了返回值类型,只是在调用的时候没正确接收而已!让我帮你修正代码,顺便给点实用的优化建议:
修正后的完整代码
private void RegisterButton_Click(object sender, RoutedEventArgs e) { string databaseName = "databaseName"; // 直接把CheckDatabase的返回值赋值给test变量,这就是你要的结果 bool test = CheckDatabase(databaseName); // 接下来就可以用test做后续逻辑了,比如: if (test) { MessageBox.Show("数据库已存在!"); } else { MessageBox.Show("数据库不存在!"); } } private bool CheckDatabase(string databaseName) { string connString = "Server=localhost\\SQLEXPRESS;Integrated Security=SSPI;database=master"; // 改用参数化查询,避免SQL注入风险,比直接拼字符串安全多了 string cmdText = "select * from master.dbo.sysdatabases where name=@DatabaseName"; bool bRet = false; using (SqlConnection sqlConnection = new SqlConnection(connString)) { sqlConnection.Open(); using (SqlCommand sqlCmd = new SqlCommand(cmdText, sqlConnection)) { // 添加参数绑定数据库名称 sqlCmd.Parameters.AddWithValue("@DatabaseName", databaseName); // 用ExecuteScalar更适合判断是否存在:它会返回查询结果的第一行第一列,不为null就说明数据库存在 object queryResult = sqlCmd.ExecuteScalar(); bRet = queryResult != null; } } return bRet; }
核心问题解决点
你原来的代码里,在RegisterButton_Click中试图直接用bool test = bRet;,但bRet是CheckDatabase方法里的局部变量,它的作用域只在CheckDatabase内部,外部方法根本访问不到。正确的做法就是直接接收CheckDatabase的返回值——因为你已经写了return bRet;,所以调用的时候把这个返回值存到变量里就行。
额外优化提示
- 原代码用
ExecuteNonQuery其实不合适,这个方法主要用于执行增/删/改操作,返回受影响的行数;判断数据库是否存在,用ExecuteScalar更高效,因为我们只需要知道有没有结果,不需要返回所有行数据。 - 直接拼接SQL字符串会有SQL注入风险,参数化查询能彻底避免这个问题,这是数据库操作的最佳实践哦。
内容的提问来源于stack exchange,提问作者positive perspective
相关产品推荐
相关产品推荐

