繁体   English   中英

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

[英]Disconnected ADO.Net mode, load from Datable to Sql Table

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

我在ado.net断开连接模式下使用ms sql数据库。 我想将设置保存到sql表。 可以对表“ Movies”进行更改,但是使用表“ 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

您必须仔细查看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

这行是错误的:

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;

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

您的第一个命令有效,因为它只有一个参数,并且您为其定义了一个.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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM