【问题标题】:C# error Not all Code paths return a value, when doing just the quesry returns value just fineC#错误并非所有代码路径都返回一个值,当只做查询返回值就好了
【发布时间】:2023-04-07 14:11:01
【问题描述】:

我需要用来自 db 的信息填充数据网格,我有一个 dataAccess 类和普通的 form.cs 文件。当我执行查询本身时,它返回的值很好,但由于某种原因,它在运行时没有在通过 sp 的代码中。 我在 WindowsForms 中遇到了这个错误,我不太明白我做错了什么。我将从展示我的 dataAccess 类开始

    public DataTable Sp_Teste()
    {

        try
        {
            ManageConnectionStateIbml1();
            SqlCommand command = new SqlCommand("SP_SELECT_DOCS_WHERE_JOBID_STATUS", 
            connectionIBML1);
            command.CommandType = CommandType.StoredProcedure;
            SqlDataAdapter adapter = new SqlDataAdapter(command);
            DataSet ds = new DataSet();
            adapter.Fill(ds);
            return ds.Tables[0];


        }
        catch (Exception ex)
        {
            Console.WriteLine("Erro: " + ex.Message);
        }
        finally
        {
            ManageConnectionStateIbml1();
            connectionIBML1.Close();
           
        }
       

    }

接下来是我的 Form.cs,因为我有 3 个数据网格视图,所以我用区域分隔它们。

        #region DatagridViewDocumentos
        dataGridViewDocumentos.DataSource = null;
        dataGridViewDocumentos.Columns.Clear();
        dataGridViewDocumentos.Refresh();
        DataTable dt = da.Sp_Teste();
        dataGridViewDocumentos.DataSource = dt;
        dataGridViewDocumentos.ColumnCount = 4;
        DataGridViewColumn columnCaixa = dataGridViewDocumentos.Columns[0];
        columnCaixa.Width = 50;
        DataGridViewColumn columnDOC = dataGridViewDocumentos.Columns[1];
        columnDOC.Width = 50;
        DataGridViewColumn columnID = dataGridViewDocumentos.Columns[2];
        columnID.Width = 50;
        DataGridViewColumn columnPROC = dataGridViewDocumentos.Columns[3];
        columnPROC.Width = 50;
        dataGridViewDocumentos.Columns[0].Name = "Caixa";
        dataGridViewDocumentos.Columns[1].Name = "DOC";
        dataGridViewDocumentos.Columns[2].Name = "ID";
        dataGridViewDocumentos.Columns[3].Name = "Proc";

       
        #endregion

希望有人能指出我的错误,谢谢。

【问题讨论】:

  • 扪心自问,发生异常时会发生什么?那么返回值是多少呢?
  • @HansKesting 好的,所以我才意识到我的错误,确切地说有两个将在接下来的 10 分钟内发布答案。
  • 更新问题,因为我解决了另一个问题,但现在我有另一个问题。
  • 问题已编辑
  • 请不要编辑问题以使现有答案无效。你问了一个问题,你得到了答案。如果您还有其他问题,请提出单独的问题。

标签: c# stored-procedures data-access


【解决方案1】:

当您清除列然后绑定数据时,所以我认为这是造成问题,请想一想从网格中删除所有列后,如何访问它们,操作系统首先设置列然后绑定数据。

#region DatagridViewDocumentos
    dataGridViewDocumentos.DataSource = null;
    dataGridViewDocumentos.Columns.Clear();
    dataGridViewDocumentos.Refresh();

    DataGridViewColumn columnCaixa = new DataGridViewColumn("Caixa");
    columnCaixa.Width = 50;
    DataGridViewColumn columnDOC = new DataGridViewColumn("DOC");
    columnDOC.Width = 50;
    DataGridViewColumn columnID = new DataGridViewColumn("ID");
    columnID.Width = 50;
    DataGridViewColumn columnPROC = new DataGridViewColumn("Proc");
    columnPROC.Width = 50;

    dataGridViewDocumentos.columns.Add(columnCaixa);
    dataGridViewDocumentos.columns.Add(columnDOC );
    dataGridViewDocumentos.columns.Add(columnID );
    dataGridViewDocumentos.columns.Add(columnPROC );
    dataGridViewDocumentos.ColumnCount = 4;

    DataTable dt = da.Sp_Teste();
    dataGridViewDocumentos.DataSource = dt;
    #endregion

【讨论】:

  • 感谢您的帮助,我做了您所做的,我正在尝试执行 datagridviewDocuments dataBind 并且它不存在,是 dataBindingComplete 还是 DataBindings?
  • WindowForms 不需要 DataBind() 方法进行数据绑定
  • 啊好吧,那我不知道接下来该怎么办了
  • 你能发布你最新的代码吗? ..现在有什么问题
  • 我可以提出一个新问题吗?可以吗?
【解决方案2】:

我认为您只需要在将数据分配给其 dataSource 属性后调用 gridview 的 DataBind() 方法即可。

#region DatagridViewDocumentos
    dataGridViewDocumentos.DataSource = null;
    dataGridViewDocumentos.DataBind();
    dataGridViewDocumentos.Columns.Clear();
    dataGridViewDocumentos.Refresh();
    DataTable dt = da.Sp_Teste();
    dataGridViewDocumentos.DataSource = dt;
    dataGridViewDocumentos.DataBind();
    dataGridViewDocumentos.ColumnCount = 4;
    DataGridViewColumn columnCaixa = dataGridViewDocumentos.Columns[0];
    columnCaixa.Width = 50;
    DataGridViewColumn columnDOC = dataGridViewDocumentos.Columns[1];
    columnDOC.Width = 50;
    DataGridViewColumn columnID = dataGridViewDocumentos.Columns[2];
    columnID.Width = 50;
    DataGridViewColumn columnPROC = dataGridViewDocumentos.Columns[3];
    columnPROC.Width = 50;
    dataGridViewDocumentos.Columns[0].Name = "Caixa";
    dataGridViewDocumentos.Columns[1].Name = "DOC";
    dataGridViewDocumentos.Columns[2].Name = "ID";
    dataGridViewDocumentos.Columns[3].Name = "Proc";

   
    #endregion

【讨论】:

  • 你好,我试过了,我不这样做
  • 它说 datagridview 不包含 databind 的定义,并且找不到接受 datagridview 类型的第一个参数的可访问扩展方法 datavind(您是否缺少 using 指令或 accembly 引用?)
  • 对不起,我忘了你正在使用窗口窗体,,,
  • 我认为,你应该在设置列部分后绑定数据
  • 那就行,我试试看
【解决方案3】:
public DataTable Sp_Teste()
{
    DataTable results = null;
    try
    {
        ManageConnectionStateIbml1();
        SqlCommand command = new SqlCommand("SP_SELECT_DOCS_WHERE_JOBID_STATUS", 
        connectionIBML1);
        command.CommandType = CommandType.StoredProcedure;
        SqlDataAdapter adapter = new SqlDataAdapter(command);
        DataSet ds = new DataSet();
        adapter.Fill(ds);
        results = ds.Tables[0];


    }
    catch (Exception ex)
    {
       Console.WriteLine("Erro: " + ex.Message);
    }
    finally
    {
        ManageConnectionStateIbml1();
        connectionIBML1.Close();
       
    }
    return results;
}

【讨论】:

  • 如另一个答案所述:我几乎总是建议不要吞下异常,而不是返回 null。
  • 更新问题,因为我解决了另一个问题,但现在我有另一个问题。
【解决方案4】:

在函数末尾添加返回语句。

finally
{
    ManageConnectionStateIbml1();
    connectionIBML1.Close(); 
}

return null;

【讨论】:

  • 在几乎所有情况下都更好:不要吞下异常......
  • 更新问题,因为我解决了另一个问题,但现在我有另一个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 2017-07-14
  • 1970-01-01
  • 2013-07-01
  • 2014-04-16
相关资源
最近更新 更多