2014-11-17 3 views
0

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

SqlConnection con = new SqlConnection("Data Source=PRAWAT; Initial Catalog=StudentData ;Integrated security=true; "); 

string query = "insert into NewValidStudentData(StudentId,Name,Marks) values (@StudentId,@Name,@Marks);"; 

SqlCommand cmd = new SqlCommand(); 
SqlDataAdapter da = new SqlDataAdapter(); 
da.InsertCommand = new SqlCommand(query, con); 

con.Open(); 

da.InsertCommand.Parameters.Clear(); 
da.InsertCommand.Parameters.AddWithValue("@StudentId", System.Data.SqlDbType.NVarChar).Value = value[0]; 
da.InsertCommand.Parameters.AddWithValue("@Name", System.Data.SqlDbType.NVarChar).Value = value[1]; 
da.InsertCommand.Parameters.AddWithValue("@Marks", System.Data.SqlDbType.NVarChar).Value = value[2]; 

da.InsertCommand.ExecuteNonQuery(); 

con.Close(); 
+0

Просмотрели ли вы ошибку при запуске этой базы данных, которая не имеет этой таблицы? – JeffO

+0

wrap в try/catch/create table. Или при запуске приложения query information_schema.tables, чтобы узнать, нужно ли вам применять какие-либо миграции. Или прочитайте о миграции, что является признаком многих фреймворков, что делает то же самое. – MatthewMartin

+0

Лучше выполнять SQL в хранимых процедурах. Если вам нужно внести изменения в свой SQL, вы измените хранимый процесс, а не ваше приложение C#. –

ответ

0

Вы можете изменить свой запрос на что-то вроде:

IF (EXISTS 
    (SELECT * FROM INFORMATION_SCHEMA.TABLES 
    WHERE TABLE_SCHEMA = 'YourSchemaName'// if you don't know the name, try 'dbo' 
    AND TABLE_NAME = 'NewValidStudentData')) 
BEGIN 
    INSERT INTO NewValidStudentData(StudentId, Name, Marks) 
    VALUES (@StudentId, @Name, @Marks);"; 
END 

Просто обернуть этот запрос в виде строки и выполнить то же самое. Таким образом, вы можете контролировать существование таблицы и вставлять данные в один вызов на сервер базы данных.

0

Сначала проверьте, если ваша таблица существует с этим фрагментом (также посмотреть answer):

bool exists; 
string tableName = "WhatEverItIs"; 

try { 
    // ANSI SQL way. Works in PostgreSQL, MSSQL, MySQL. 
    var cmd = new OdbcCommand(
     "select case when exists((select * from information_schema.tables where table_name = '" + tableName + "')) then 1 else 0 end"); 

    exists = (int)cmd.ExecuteScalar() == 1; 
} catch { 
    try { 
     // Other RDBMS. Graceful degradation 
     exists = true; 
     var cmdOthers = new OdbcCommand("select 1 from " + tableName + " where 1 = 0"); 
     cmdOthers.ExecuteNonQuery(); 
    } catch { 
     exists = false; 
    } 
} 

Тогда, если он не существует:

if(!exists) { 
    var createTableSql = "CREATE TABLE WHAT_YOUR_TABLE_SCHEME_IS"; 
    // execute a command with above createTableSql, to create your table 
} 

А потом, сделайте остальную часть вашего код

0

StudentId как NVARCHAR? Имеет ли в нем идентификатор студента?

IF NOT EXISTS (SELECT * FROM sys.objects 
WHERE object_id = OBJECT_ID(N'[dbo].[NewValidStudentData]') AND type in (N'U')) 

BEGIN 
CREATE TABLE [dbo].[NewValidStudentData](
StudentId NVARCHAR(10), 
Name NVARCHAR(100), 
Marks NVARCHAR(3) 
) 

END 

Примечание: Я бы предложил обработать это в хранимой процедуре, а не писать все это в коде C#.

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