Извлечение данных из SQL БД на основе данных пользователя


Я написал это для подключения к локальной БД с помощью локальной учетные данные для входа. Он снова тянет информационная карта на основе ввода пользователя.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;

namespace SQL_Console{
public class Info
{

//SQL Sever connection

    public static string connstring = @"Data Source=localhost\MAYDAY;Initial Catalog=NV; Integrated Security=SSPI; Connection Timeout=5";

    public static string ConnectionString
    {
        get
        {
            return ConnectionString;
        }
        set
        {
            connstring = value;
        }
    }
}

public class Lookup
{

//SQL Query

        public static string squery = "Select Cardnumber, CardHolder, ExpireDate from CreditCardTransactionHistory where clientnumber = (select clientnumber from foliolink where folionumber = @fnumber)";

}

//Execution

    class Program
{
    static void Main(string[] args)
    {
        string sqlconn = Info.connstring;


        Console.WriteLine("Enter Folio Number:");
        int fnum = Convert.ToInt32(Console.ReadLine());

        Console.Clear();


        SqlConnection sqlcon1 = new SqlConnection(sqlconn);
        sqlcon1.Open();

        SqlCommand sql1 = new SqlCommand(Lookup.squery, (sqlcon1));

        sql1.Parameters.AddWithValue("@fnumber", fnum);
        SqlDataReader reader = sql1.ExecuteReader();

        while (reader.Read())
        {
            Console.Write("Card Number: {0}\nCard Holder: {1}\nExpiration: {2}\n\n", reader[0], reader[1], reader[2]);


        }
        Console.ReadLine();
        sqlcon1.Close();
    }


}
}


1350
3
задан 17 февраля 2018 в 12:02 Источник Поделиться
Комментарии
2 ответа

Я не понимаю, используя класс со статическими свойствами для хранения некоторых строк.

Использовать для класса, распоряжаюсь:

public static void SimpleDB()
{
string sqlconn = @"Data Source=localhost\MAYDAY;Initial Catalog=NV; Integrated Security=SSPI; Connection Timeout=5";
string query = "Select Cardnumber, CardHolder, ExpireDate " + Environment.NewLine +
"from CreditCardTransactionHistory " + Environment.NewLine +
"where clientnumber = (select clientnumber from foliolink where folionumber = @fnumber)";

Console.WriteLine("Enter Folio Number:");
int fnum = Convert.ToInt32(Console.ReadLine());
Console.Clear();

using (SqlConnection sqlcon1 = new SqlConnection(sqlconn))
{
sqlcon1.Open();
using (SqlCommand sql1 = new SqlCommand(query, (sqlcon1)))
{
sql1.Parameters.AddWithValue("@fnumber", fnum);
using (SqlDataReader reader = sql1.ExecuteReader())
{
if (reader.HasRows)
{
while (reader.Read())
{
Console.Write("Card Number: {0}\nCard Holder: {1}\nExpiration: {2}\n\n", reader[0], reader[1], reader[2]);
}
}
else
{
Console.WriteLine("no results");
}
}
}
}
Console.ReadLine();
}

2
ответ дан 18 февраля 2018 в 12:02 Источник Поделиться

Я не понимаю смысл ConnectionString класс. Почти любой пример относительно написания БД код доступа будет использовать строку подключения взята с .config класс; Почему вы не следуя этой рекомендации?


Предметы, как SqlConnection, SqlCommand, SqlDataReader должны всегда использоваться в using блок для того, чтобы правильно распорядиться своими ресурсами. Посмотрим на примерах, как этот, или проверить этот вопрос на так.


Если вы собираетесь разместить свой SQL-код в отдельный класс, я бы предпочел, чтобы быть встроенным .sql файл, который затем можно получить через такой код:

public static string GetQuery(string scriptName, string namespacePrefix)
{
var resourceName = namespacePrefix + scriptName;
var assembly = Assembly.GetExecutingAssembly();

using (var stream = assembly.GetManifestResourceStream(resourceName))
{
if (stream == null)
{
throw new Exception($"Missing template: {resourceName}");
}

using (var streamReader = new StreamReader(stream))
{
return streamReader.ReadToEnd();
}
}
}

Таким образом, вы могли бы получить некоторые технологии IntelliSense для SQL-кода.


Не использовать AddWithValue().


В более общем плане: избегать написания кода ADO.NET вручную. Избегайте использования SqlDataReader и т. д. требуется перевести ее результаты в ваши собственные классы и использовать один из многих инструментов, который обрабатывает это для вас. В эти дни подавляющее большинство профессиональных код написан с использованием ОРМ, как сущности рамок. Даже при использовании микро ОРМ, как щеголь будет намного предпочтительнее.

5
ответ дан 19 февраля 2018 в 10:02 Источник Поделиться