Подключитесь к SQL Server и посчитайте строки столбца таблицы, используя C # в WPF (.NET Core)

#c# #wpf #.net-core

#c# #wpf #.net-core

Вопрос:

Недавно я начал использовать C # в WPF (.NET Core). Я очень новичок в использовании C #, поэтому прошу прощения, если на вопрос относительно легко ответить. Вкратце, я хотел бы создать кнопку, которая при нажатии пользователем будет генерировать количество строк определенной таблицы.

Мой код до сих пор (с использованием WPF (.NET Core) в Visual Studio 2019

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Data.SqlClient;

namespace TestEnvironment
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private dynamic connectionString;

        public ConnectionStringValue()
        {
            connectionString();

            static void connectionString()
            {
                string connectionString = "Data Source=youServerHere;Initial Catalog=YourDataBase;Integrated Security=True;"; #access it with Windows Authentication
            }
        }

        SqlConnection sqlCon = new SqlConnection(connectionString);
        sqlCon.Open();

        SqlCommand sqlCommand = new SqlCommand("SELECT COUNT(*) FROM tblProduct");
        sqlCommand.Connection = sqlCon;
 
        int RecordCount = Convert.ToInt32(sqlCommand.ExecuteScalar());

        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            Count.Text = RecordCount;
        }
    }
}

  

Моя первая ошибка, которую я не могу преодолеть, — это переменная ConnectionString, для которой я получаю ошибку: CS0236 Инициализатор поля не может ссылаться на нестатическое поле, метод или свойство ‘MainWindow.ConnectionString’

Чтобы исправить это, я попытался создать частный динамический объект с именем ConnectionString, но моя ошибка все еще не решена.

Заранее благодарю за любые советы и еще раз приношу извинения за мою неопытность в C #.

Обновление кода

 {
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private string connectionString;

        public ConnectionStringValue()
        {
            static void connectionString()
            {
                connectionString = "Data Source=youServerHere;Initial Catalog=YourDataBase;User ID=sa; Password=123;";
            }
        }
       
        SqlConnection sqlConnection = new SqlConnection(connectionString);
        sqlConnection.Open();

        SqlCommand sqlCommand = new SqlCommand("SELECT COUNT(*) FROM tblProduct");
        sqlCommand.Connection = sqlConnection;
 
        int RecordCount = Convert.ToInt32(sqlCommand.ExecuteScalar());
        

        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            Count.Text = RecordCount;
        }
    }
}
  

Ошибка 1: Метод CS1520 должен иметь возвращаемый тип (для ConnectionStringValue)
Ошибка 2: CS1656 не удается назначить ‘ConnectionString’, поскольку это ‘группа методов’ CS8422 Статическая локальная функция не может содержать ссылку на ‘this’ или ‘base’. (обе ошибки для объекта ConnectionString string)

Комментарии:

1. Просто. Удалите «строку» из следующего. Он уже определен: string ConnectionString = «Источник данных = youServerHere; Начальный каталог = YourDataBase; Встроенная безопасность = True;»; #доступ к нему с помощью аутентификации Windows. Затем измените с : private dynamic ConnectionString; На: private string ConnectionString;

2. @jdweng Спасибо за ответ. Я внес предложенные вами изменения. Хотя я все еще получаю следующую ошибку: public ConnectionStringValue()-> ошибка: Метод должен иметь возвращаемый тип. 2-я ошибка ConnectionString-> Ошибка: CS1656 не удается назначить ‘ConnectionString’, поскольку это ‘группа методов’

3. Удалите следующее: ConnectionString();

4. @jdweng Если вы проверите мой обновленный код, я все равно получу ошибки даже после ваших комментариев. Заранее прошу вашего внимания 🙂

5. @NikSP SSMS — это клиентский инструмент. Вы имеете в виду SQL Server

Ответ №1:

Если я что-то пропустил, скажите мне, я бы сделал это в рамках вашего нажатия кнопки следующим образом :

 {
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>

public partial class MainWindow : Window
{

    private string connectionString = "Data Source=youServerHere;Initial Catalog=YourDataBase;User ID=sa; Password=123;"; 
    public MainWindow()
    {
        InitializeComponent();
    }

      
    

    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
      using(SqlConnection sqlConnection = new SqlConnection(connectionString))
      {         
        using( SqlCommand sqlCommand = new SqlCommand("SELECT COUNT(*) FROM tblProduct", sqlConnection))
          {
            sqlConnection.Open();

            int RecordCount = Convert.ToInt32(sqlCommand.ExecuteScalar());

            Count.Text = RecordCount.ToString();
          }
      }
    }
}
  

}

Комментарии:

1. Coskun большое спасибо за ваш ответ. Похоже, ошибки нет. Однако, когда я пытаюсь его отладить, я получаю следующее исключение: System. Исключение InvalidOperationException: ‘Соединение не было закрыто. Текущее состояние соединения открыто.’… Поиск по ошибке я выяснил, что использование using() решит эту проблему. Однако в моем случае это не сработало

2. NikSp, извините, я поставил SqlConnection. Откройте(); два раза. Удалите первый, он будет работать. Я редактирую свой ответ. Нет необходимости изменять состояния с помощью.

3. Coskun ваше решение сработало отлично. Поскольку я новичок в C #, не могли бы вы поделиться со мной в разделах комментариев или в своих ответах аргументацией вашего ответа? Почему вы инициировали private string=» » вне класса button? 2) В основном правильное структурирование. Вы рекомендуете какой-либо соответствующий учебник по базовому кодированию на C #? Заранее большое спасибо

4. Итак, вы можете определить строку внутри нажатия кнопки, но на этот раз она будет доступна только в этой области. Если вы объявите его вне нажатия кнопки, он будет доступен во всем вашем классе. И есть модификаторы доступа, чтобы взглянуть, чтобы понять публичные, частные и т.д. объявления.

5. Для кодирования на C # вы можете найти множество источников, выполнив поиск по c # learning. Мне нравится этот сайт: w3schools.com/cs