#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