Ошибка сводной таблицы SQL [дубликат]

Похоже, вы используете библиотеку «родной базы». Код мне подходит. Можете ли вы также отправить стиль View?

Также, в чем проблема? Вы вообще не можете видеть кнопки или вы не можете вызвать связанное действие здесь?

2
задан Scott Chamberlain 19 August 2013 в 16:16
поделиться

3 ответа

Не используйте инициализацию конструктора для этого.

DataTable dt = new DataTable();
using (var con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
using (var cmd = new SqlCommand(" SELECT FName" +
                                        " FROM EmployeeTable " +
                                        " WHERE EmployeeId = @empId",
                                        con))
{
    cmd.Parameters.Add(new SqlParameter("@empId",empId));
    try
    {
           con.open();
           dt.Load(cmd.ExecuteReader());
    }
    catch(Exception) //BAD BAD BAD!!! Why are you doing this!
    {
    }
}
return dt;

Также почему вы ловите все исключения и отбрасываете их, это ужасно. Если у вас есть исключение, которое, по вашему мнению, будет распространено, сначала посмотрите, можете ли вы реорганизовать свой код, чтобы проверить его на входные значения, которые могли бы вызвать его, а не набросать вообще (возможно, даже выбросить ArgumentException самостоятельно) , и если вы не можете этого сделать, проверьте это конкретное исключение, а не все возможные.

4
ответ дан Scott Chamberlain 21 August 2018 в 02:52
поделиться
  • 1
    Я установил его в SqlException в моем фактическом коде, я просто написал это быстро – Divide100 19 August 2013 в 15:59
  • 2
    Я планирую перенаправить ошибку на страницу с ошибкой и позже зарегистрировать ее в БД, но прямо сейчас я не много сделал с исключениями – Divide100 19 August 2013 в 16:03
  • 3
    Затем, по крайней мере, измените свой улов на catch(SqlException ex) и введите throw new NotImplmentedException("Error logging not added", ex); в тело. Таким образом, если исключение произойдет и вы забудете обновить свой код, вы все равно можете получить уведомление о том, что это произошло. – Scott Chamberlain 19 August 2013 в 16:05
  • 4
    Прямо сейчас я показываю ошибку в div, когда ее выбрасывают: errorDiv.InnerText = & quot; Ошибка: & quot; + e.Message; – Divide100 19 August 2013 в 16:06
  • 5
    В будущем, когда вы задаете вопросы, просто добавьте что-то вроде //(Snip) log the execption к вашему вопросу, если вы действительно регистрируете ошибку, или вы получите от вас все прыгающие вверх и вниз, чтобы выбросить исключение. Эта ошибка распространена в новых программах, поэтому многие люди уходят с пути, чтобы разбить эту дурную привычку, прежде чем она начнется, если они ее заметят. Показывая, что вы регистрируетесь, но не включили его в вопрос, люди вас не будут беспокоить (я также рекомендую отредактировать ваш оригинальный вопрос) – Scott Chamberlain 19 August 2013 в 16:09

Нельзя использовать инициализатор объектов для чего-либо другого, кроме присвоения свойств, поэтому вы должны переписать свой код следующим образом (только соответствующая часть здесь):

...
using (var cmd = new SqlCommand(" SELECT FName" +
                                        " FROM EmployeeTable " +
                                        " WHERE EmployeeId = @empId",
                                        con))
{
    cmd.Parameters.Add(new SqlParameter("@empId", empId));
...
2
ответ дан Andrei 21 August 2018 в 02:52
поделиться
  • 1
    Итак, вы не можете указать его в инициализации блока использования? – Divide100 19 August 2013 в 15:54
  • 2
    @ Divide100, выражения типа Collection.Add - нет. – Andrei 19 August 2013 в 15:56

Ваш второй оператор использования закрывается перед попыткой catch. Поэтому, как только поймается попытка catch, блок использования уже закрыт. Поэтому параметры находятся в неправильной области.

0
ответ дан Christopher Trevor 21 August 2018 в 02:52
поделиться
  • 1
    Он не открывается до начала попытки / улова – Divide100 19 August 2013 в 16:01
  • 2
    О да, теперь я вижу. Виноват. , Был длинный день. – Christopher Trevor 19 August 2013 в 16:24
Другие вопросы по тегам:

Похожие вопросы: