C# 在sqlserver的一个连接中在一个表中保存多行 场景:假设我有一个表,有3列ID,QuestionId和optEd答案。我有一个表格,包括n个问题和一些答案选项。在“保存”按钮上,我想将数据保存到数据库中(在我的表中)
问题:我想在一个连接中保存所有答案 我采取的步骤:我制作了一个字符串,其结构为questionId:optedAnswer | questionId:optedAnswer |等等。。。。C# 在sqlserver的一个连接中在一个表中保存多行 场景:假设我有一个表,有3列ID,QuestionId和optEd答案。我有一个表格,包括n个问题和一些答案选项。在“保存”按钮上,我想将数据保存到数据库中(在我的表中),c#,asp.net,sql-server,C#,Asp.net,Sql Server,问题:我想在一个连接中保存所有答案 我采取的步骤:我制作了一个字符串,其结构为questionId:optedAnswer | questionId:optedAnswer |等等。。。。 我写了一个程序。开始循环。基于“:”和“|”拆分数据,并在一个连接中保存数据。但这是一项艰巨的任务。有没有办法不使用循环和拆分直接保存数据。创建一个包含所有查询和AN的XML字符串,并将这些XML字符串传递给sql,然后使用 sp_xml_preparedocument过程这些sql内置的读取xml的过程 您
我写了一个程序。开始循环。基于“:”和“|”拆分数据,并在一个连接中保存数据。但这是一项艰巨的任务。有没有办法不使用循环和拆分直接保存数据。创建一个包含所有查询和AN的XML字符串,并将这些XML字符串传递给sql,然后使用 sp_xml_preparedocument过程这些sql内置的读取xml的过程
您可以获得有关的更多信息,创建一个包含所有查询和ans的XML字符串,并将这些XML字符串传递给sql并使用
sp_xml_preparedocument过程这些sql内置的读取xml的过程
您可以获得有关的更多信息,请将每个问题ID及其OptedAnswer保存在Datatable中,然后将Datatable插入SQL表,如下所示:
DataTable dataTable = null; // your data needs to be here
try
{
ConnectionStringSettings mConString = ConfigurationManager.ConnectionStrings["SiteSqlServer"];
// Optional truncating old table
using (SqlConnection connection = new SqlConnection(mConString.ConnectionString))
{
connection.Open();
// Delete old entries
SqlCommand truncate = new SqlCommand("TRUNCATE TABLE MYTABLE", connection);
truncate.ExecuteNonQuery();
}
SqlBulkCopy bulkCopy = new SqlBulkCopy(mConString.ConnectionString, SqlBulkCopyOptions.TableLock)
{
DestinationTableName = "dbo.MYTABLE",
BatchSize = 100, //set your required size
BulkCopyTimeout = 360
};
bulkCopy.WriteToServer(dataTable);
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
将每个问题ID及其OptedAnswer保存在Datatable中,然后将Datatable插入SQL表,如下所示:
DataTable dataTable = null; // your data needs to be here
try
{
ConnectionStringSettings mConString = ConfigurationManager.ConnectionStrings["SiteSqlServer"];
// Optional truncating old table
using (SqlConnection connection = new SqlConnection(mConString.ConnectionString))
{
connection.Open();
// Delete old entries
SqlCommand truncate = new SqlCommand("TRUNCATE TABLE MYTABLE", connection);
truncate.ExecuteNonQuery();
}
SqlBulkCopy bulkCopy = new SqlBulkCopy(mConString.ConnectionString, SqlBulkCopyOptions.TableLock)
{
DestinationTableName = "dbo.MYTABLE",
BatchSize = 100, //set your required size
BulkCopyTimeout = 360
};
bulkCopy.WriteToServer(dataTable);
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
还有另一种方法可以在一个连接中保存多个数据。 创建这样一种表
CREATE TYPE [dbo].[YourTypeName] AS TABLE(
[Col1] [bigint] NULL,
[Col2] [datetime] NULL,
[Col3] [bigint] NULL,
[Col4] [bigint] NULL,
[Col5] [datetime] NULL
)
然后写一个这样的过程
CREATE PROCEDURE [dbo].YOURPROCEDURENAME]
(
@yourDataTableName YourTypeName READONLY
)
AS
INSERT INTO TableName
(Col1,
Col2,
Col3,
Col4,
Col5)
SELECT CP.Val1,
CP.Val2,
CP.Val3,
CP.Val4,
CP.Val15)
FROM @yourDataTableName CP
GO
然后在代码隐藏中创建一个数据表,并像这样在过程中传递该数据表
SqlCommand cmd = new SqlCommand("YOURPROCEDURENAME");
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@yourDataTableName", SqlDbType.Structured).Value = datatable;
cmd.Parameters[0].TypeName = "YourTypeName ";
还有另一种方法可以在一个连接中保存多个数据。 创建这样一种表
CREATE TYPE [dbo].[YourTypeName] AS TABLE(
[Col1] [bigint] NULL,
[Col2] [datetime] NULL,
[Col3] [bigint] NULL,
[Col4] [bigint] NULL,
[Col5] [datetime] NULL
)
然后写一个这样的过程
CREATE PROCEDURE [dbo].YOURPROCEDURENAME]
(
@yourDataTableName YourTypeName READONLY
)
AS
INSERT INTO TableName
(Col1,
Col2,
Col3,
Col4,
Col5)
SELECT CP.Val1,
CP.Val2,
CP.Val3,
CP.Val4,
CP.Val15)
FROM @yourDataTableName CP
GO
然后在代码隐藏中创建一个数据表,并像这样在过程中传递该数据表
SqlCommand cmd = new SqlCommand("YOURPROCEDURENAME");
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@yourDataTableName", SqlDbType.Structured).Value = datatable;
cmd.Parameters[0].TypeName = "YourTypeName ";
我也会选择以xml为中心的解决方案,在xml文档中准备数据,在数据库中发布,并使用xml中的SELECT作为插入源,例如:
declare @xml XML
DECLARE @docid int
set @xml = N'<?xml version="1.0" ?>
<Custs>
<Cust>
<name>Erik</name>
<lastname>Stark</lastname>
</Cust>
<Cust>
<name>Donald</name>
<lastname>Duck</lastname>
</Cust>
<Cust>
<name>Johnny</name>
<lastname>Walker</lastname>
</Cust>
</Custs>'
EXEC sp_xml_preparedocument @docid OUTPUT, @xml
SELECT *
FROM OPENXML (@docid, '/Custs/Cust',2)
WITH (name varchar(50), lastname varchar(50))
exec sp_xml_removedocument @docid
declare@xml
声明@docid int
设置@xml=N'
埃里克
明显的
唐纳德
鸭子
约翰尼
散步的人
'
EXEC sp_xml_preparedocument@docid输出,@xml
挑选*
来自OPENXML(@docid,'/Custs/Cust',2)
使用(名称varchar(50),姓氏varchar(50))
exec sp_xml_removedocument@docid
我也会选择以xml为中心的解决方案,在xml文档中准备数据,在数据库中发布,并使用xml中的SELECT作为插入源,例如:
declare @xml XML
DECLARE @docid int
set @xml = N'<?xml version="1.0" ?>
<Custs>
<Cust>
<name>Erik</name>
<lastname>Stark</lastname>
</Cust>
<Cust>
<name>Donald</name>
<lastname>Duck</lastname>
</Cust>
<Cust>
<name>Johnny</name>
<lastname>Walker</lastname>
</Cust>
</Custs>'
EXEC sp_xml_preparedocument @docid OUTPUT, @xml
SELECT *
FROM OPENXML (@docid, '/Custs/Cust',2)
WITH (name varchar(50), lastname varchar(50))
exec sp_xml_removedocument @docid
declare@xml
声明@docid int
设置@xml=N'
埃里克
明显的
唐纳德
鸭子
约翰尼
散步的人
'
EXEC sp_xml_preparedocument@docid输出,@xml
挑选*
来自OPENXML(@docid,'/Custs/Cust',2)
使用(名称varchar(50),姓氏varchar(50))
exec sp_xml_removedocument@docid
谢谢。我想得到同样的答案。谢谢。我的回答也是一样的。