Несколько Sql команд для разных запросов c # - PullRequest
1 голос
/ 21 февраля 2012

Я относительно новичок в работе с C # и SQL, и в настоящее время у меня есть приложение, над которым я работаю, которое имеет несколько запросов для одной таблицы, все из которых используются при различных обстоятельствах, например, при обновлении определенного события это илинапример, выберите это, чтобы увидеть, соответствует ли оно этому и т. д.

Причина, по которой я спрашиваю, однако, есть ли способ объединить эти запросы, поскольку все они запрашивают одну и ту же таблицу, или их лучше оставить отдельно?Другая вещь, которая смущает меня, - как получить определенное значение определенного столбца в запросе выбора?Я не совсем уверен, как получить доступ к этому с помощью кода C #, любые простые примеры очень ценятся.

Большое спасибо,

1 Ответ

2 голосов
/ 21 февраля 2012

Если я правильно вас понимаю, у вас есть один запрос, который вы используете в нескольких разных местах вашего кода - каждый раз, чтобы получить доступ к одной и той же информации, только при разных обстоятельствах? И вы не уверены, как получить конкретные данные столбца, которые вы ищете?

Как уже упоминалось, учебник для начинающих по доступу к данным, вероятно, будет хорошим чтением. Но вот немного быстрой и грязной информации, чтобы подтолкнуть вас в правильном направлении. В большинстве случаев это либо один из нескольких способов сделать это (в котором вы должны знать различия), это мой типичный предпочтительный способ, или я просто подумал, что это будет наиболее понятным для полного новичка. Посмотрите на пару уроков после этого. !

Прежде всего, если вы используете один и тот же запрос снова и снова, я предпочитаю помещать его в хранимую процедуру, если в SQL передано несколько параметров. Вы должны использовать параметры всегда (см. Пример), чтобы избежать проблем с вводом данных и приведением типов. Я не знал этого, когда только начинал, и, таким образом, приобрел дурную привычку не использовать параметры - что было очень трудно сломать ... так что начните сейчас! В конечном итоге вы получаете набор данных обратно из базы данных ... этот набор может представлять что угодно, от одного столбца данных до всей базы данных, по существу, так что вам нужно перемещаться по этому набору данных результатов, чтобы добраться до одного (нескольких). ) вы на самом деле хотите в каждом конкретном случае (например, заполнение текстового поля одним значением и другого текстового поля другим значением ... оба значения находятся в наборе одинаковых данных, нет необходимости запрашивать вашу БД для каждого текстового поля просто эффективно запросите его один раз, и вы должны получить нужные значения.)

Animals_Table:

AnimalID, Name  , Type
1       , Frog  , Amphibian
2       , Snake , Reptile
3       , Bear  , Mammal
3       , Lion  , Mammal

В C #:

        SqlCommand myCommand = new SqlCommand(); //The command you intend to pass to SQL
        DataSet myDataSet = new DataSet(); //The Dataset you'll fill and retrieve info from
        SqlConnection myConnection = new SqlConnection(Properties.Settings.Default.yourConnectionString); // I prefer my connection string to be in my project's properties. Don't put sensitive info like passwords here though


        myCommand.CommandType = CommandType.Text; // In this case we're using a text command, not stored procedure.  That means you're typing out your command, as a string, in c# (next line)
        myCommand.CommandText = "SELECT * FROM Animals_Table WHERE Type=@Type"; // @ denotes a parameter, in this case named Type
        myCommand.Parameters.AddWithValue("Type", "Mammal"); //You can also do Add instead of AddWithValue - this lets/forces you to input the type information manually.  It's more of a pain, but can resolve problems if c# doesn't make right assumptions
        myConnection.Open();  // Open your connection
        Command.Connection = myConnection;  // Plug that connection into your command
        SqlDataAdapter adapter = new SqlDataAdapter(Command); // Plug that command into a data adapter
        adapter.Fill(myDataSet); // populate your DataSet

        // Now you can use the data you've retrieved (your DataSet)
        textboxReturnedAnimalName1.Text = myDataSet.Tables[0].Rows[0]["Name"]; //You want the Name field from SQL, for the first table returned, and the first row in that table

Поскольку в наборе данных, который вы получили, может быть несколько таблиц, каждая из которых содержит несколько строк, вам необходимо указать, к какому адресу вы пытаетесь получить доступ (обычно это первая / единственная таблица, а для этого простого примера - первая строка. Вы также можете создать цикл for и выполнить итерацию по строкам, заменив Rows [0] на переменную int, которую вы увеличиваете в каждом цикле.

На самом деле я не скомпилировал и не протестировал приведенный выше код, но считаю, что он должен работать. Если нет, то, по крайней мере, есть основная концепция, и я уверен, что вы можете воспользоваться этим и исправить любые опечатки, которые у меня могли быть;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...