2014-03-05 47 views
1

我有兩個數據庫電影(ID,名稱)和SessionsCinema(ID,SessionTime,電影,大廳,價格)。 id - 是自動增量行。斷開ADO.Net模式,從數據庫加載到Sql表

我在ado.net上工作與ms sql數據庫斷開連接的模式。 我想將設置保存到SQL表。 對錶格「電影」的更改是可以的,但對於表格「SessionsCinema」有一些錯誤。

//connection start 
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(); 
builder.DataSource = "MYPC\SQLEXPRESS"; 
builder.InitialCatalog = "Cinema"; 
builder.IntegratedSecurity = true; 
SqlConnection conn = new SqlConnection(builder.ConnectionString); 
//connection end 


//Movies start 
SqlCommand inscmd = new SqlCommand(); 
inscmd.CommandText = "Insert into Movies (name) values(@name); select id = @@IDENTITY from Movies"; 
inscmd.Connection = conn; 
inscmd.Parameters.Add("@name", SqlDbType.NVarChar, 250, "name"); 

SqlDataAdapter adapter = new SqlDataAdapter(inscmd); 
adapter.InsertCommand = inscmd; 
adapter.Update(Movies); 
//Movies end 

//SessionsCinema start 
inscmd = new SqlCommand(); 
inscmd.CommandText = "Insert into SessionsCinema (SessionTime, movie, hall, price) values(@SessionTime, @movie, @hall, @price); select id = @@IDENTITY from SessionsCinema"; 
inscmd.Connection = conn; 
inscmd.Parameters.Add("@SessionTime,@movie,@hall,@price", SqlDbType.NVarChar, 250, "SessionTime,movie,hall,price"); 

adapter = new SqlDataAdapter(inscmd); 
adapter.InsertCommand = inscmd; 
adapter.Update(SessionsCinema); 
//SessionsCinema end 
+1

究竟是什麼錯誤? –

+0

','附近的語法不正確。 必須聲明標量變量「@SessionTime」 – user2963950

回答

3

你必須看看更接近SqlParameterCollection.Add簽名。

//SessionsCinema start 
      inscmd = new SqlCommand(); 
      inscmd.CommandText = "Insert into SessionsCinema (SessionTime, movie, hall, price) values(@SessionTime, @movie, @hall, @price); select id = @@IDENTITY from SessionsCinema"; 
      inscmd.Connection = conn; 
      inscmd.Parameters.Add("@SessionTime, SqlDbType.NVarChar, 250).Value = SessionTime; 
      inscmd.Parameters.Add("@movie", SqlDbType.NVarChar, 250).Value = movie; 
      inscmd.Parameters.Add("@hall", SqlDbType.NVarChar, 250).Value = hall; 
      inscmd.Parameters.Add("@price", SqlDbType.NVarChar, 250).Value = price; 
      adapter = new SqlDataAdapter(inscmd); 
      adapter.InsertCommand = inscmd; 
      adapter.Update(SessionsCinema); 
//SessionsCinema end 
+0

這不會設置這些參數的值。 '.Add()'的最後一個參數是設置一個源列。 –

+0

@JoelCoehoorn固定。 –

1

此行是錯誤的:

inscmd.Parameters.Add("@SessionTime,@movie,@hall,@price", SqlDbType.NVarChar, 250, "SessionTime,movie,hall,price"); 

需要有單獨的Parameters.Add()調用每個在該列表中的參數。它應該看起來像這樣:

inscmd.Parameters.Add("@SessionTime", SqlDbType.NVarChar, 250).Value = SessionTime; 
inscmd.Parameters.Add("@movie", SqlDbType.Int).Value = movie; 
inscmd.Parameters.Add("@hall", SqlDbType.Int).Value = hall; 
inscmd.Parameters.Add("@price", SqlDbType.Money).Value = price; 

此外,請檢查您的第一個命令的參數。看起來你在那裏犯了同樣的錯誤。

+0

如何寫它,如果(SessionTime) - 字符串,(電影,大廳,價格) - int? inscmd.Parameters.Add(「@ SessionTime」,SqlDbType.NVarChar,250,「SessionTime」); (「@ movie」,SqlDbType.Int,sizeof(Int32),「movie」); inscmd.Parameters.Add(「@ hall」,SqlDbType.Int,sizeof(Int32),「hall」); inscmd.Parameters.Add(「@ price」,SqlDbType.Int,sizeof(Int32),「price」); 此代碼是錯誤的。 – user2963950

+0

@ user2963950你不能像這樣使用'sizeof'。 –

+0

名稱價格在當前上下文中不存在。關於大廳,電影,SessionTime是同樣的情況。 – user2963950

1

您的第一條命令是可用的,因爲它只有一個參數,並且您爲其定義了一個.Add方法。沒關係。

但是你的第二個命令有4個參數,你不能在一個.Add方法中添加4個參數。

你需要把它們分開加上SqlParameterCollection.AddWithValue就好了;

inscmd.Parameters.AddWithValue("@SessionTime, SessionTime); 
inscmd.Parameters.AddWithValue("@movie", movie); 
inscmd.Parameters.AddWithValue("@hall", hall); 
inscmd.Parameters.AddWithValue("@price", price); 
+0

不是AddWithValue()的粉絲,因爲它強制.Net猜測參數時間。有時候,.Net會猜測錯誤,有時候會出現重大的性能影響。 –

+0

錯誤 - 名稱價格在當前上下文中不存在。關於大廳,電影,SessionTime是同樣的情況。 – user2963950

+0

@ user2963950您在哪裏定義了要插入的值? –