You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:23:19