0

シナリオ: ID、QuestionId、optedAnswer の 3 つの列を持つテーブルがあるとします。質問の数と回答のためのいくつかのオプションで構成されるフォームがあります。保存ボタンで、データベース(私のテーブル)にデータを保存したい。

問題: すべての回答を 1 つの接続に保存したい。

私が取ったステップ: 構造 questionId:optedAnswwer | を持つ文字列を作成しました。questionId : optedAnswer | などなど…。手順を書きました。ループを開始しました。「:」と「|」に基づいてデータを分割します と保存されたデータを 1 つの接続で。しかし、それは厳格な作業です。ループと分割を使用せずにデータを直接保存する方法はありますか。

4

4 に答える 4

3

各 questionId とその OptedAnswer を 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);
        }  
于 2012-11-05T11:01:27.597 に答える
1

すべての質問と回答の XML 文字列を作成し、これらの xml 文字列を sql に渡し、
sp_xml_preparedocument プロシージャを使用して、XML を読み取るこれらの sql 組み込みプロシージャを使用します。

Bulk INsertに関する詳細情報を取得できます

于 2012-11-05T10:50:08.260 に答える
0

1 つの接続で複数のデータを保存する別の方法があります。このようなタイプのテーブルを作成します

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

そして、コードビハインドでデータテーブルを作成し、そのデータテーブルを次のようにprosedureに渡します...

SqlCommand cmd = new SqlCommand("YOURPROCEDURENAME");
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@yourDataTableName", SqlDbType.Structured).Value = datatable;
cmd.Parameters[0].TypeName = "YourTypeName ";
于 2012-11-05T12:18:05.350 に答える
0

また、xml 中心のソリューションを使用し、xmldocument でデータを準備し、それをデータベースに投稿し、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
于 2012-11-05T13:08:55.833 に答える