断开ADO.Net模式,从Datable加载到Sql表

时间:2014-03-05 19:56:52

标签: c# ado.net

我有两个数据库电影(id,name)和SessionsCinema(id,SessionTime,电影,大厅,价格)。 id - 是自动增量行。

我使用ms sql数据库在ado.net断开连接模式下工作。 我想将设置保存到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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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;

另外,请从第一个命令检查参数。看起来你在那里犯了同样的错误。

答案 2 :(得分: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);