2012-02-20 2 views
1

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

Причина, по которой я спрашиваю, есть ли способ объединить эти запросы, поскольку они все запрашивают одну и ту же таблицу или они лучше всего отделяются друг от друга?

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

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

+2

звучит так, как будто вам нужен базовый учебник по доступу к данным. Не то, что этот сайт может предоставить. –

+1

ну, при условии, что пример будет работать как ответ тогда. – Tengiz

ответ

2

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

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

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

Animals_Table:.

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

I н 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 [email protected]"; // @ 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, которую вы увеличиваете каждый цикл.

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

Смежные вопросы