C # WinForms - SQL Server CE - SqlCeDataReader의 데이터가 손실됩니까?

c# sqlbulkcopy sql-server sql-server-ce winforms

문제

SQL Server 데이터베이스에서 SQL Server CE 로컬 데이터베이스로 데이터를 복사하려고합니다.

내 방법은 다음과 같습니다.

private const string LOCAL_SDF_FILE = "LocalDB.sdf";
private const string LOCAL_CONN_STRING = "Data Source='|DataDirectory|LocalDB.sdf'; LCID=1033; Password=3C670F044A; Encrypt=TRUE;";
private const string SOURCE_CONN_STRING = "Data Source=SQL\\SERVER;Initial Catalog=DB;Integrated Security=True;Pooling=False";

public static void CreateDB()
{
        if (File.Exists(LOCAL_SDF_FILE))
        {
            File.Delete(LOCAL_SDF_FILE);
        }

        SqlCeEngine engine = new SqlCeEngine(LOCAL_CONN_STRING);
        engine.CreateDatabase();
        engine.Dispose();

        SqlCeConnection localCnx = null;

        try
        {
            localCnx = new SqlCeConnection(LOCAL_CONN_STRING);
            localCnx.Open();

            SqlCeCommand localCmd = localCnx.CreateCommand();

            #region CREATE TABLE t_TypeConfig
            localCmd.CommandText = @"CREATE TABLE t_TypeConfig(
                                        TypeConfig_ID int IDENTITY(1,1) NOT NULL,
                                        TypeConfig_Name nvarchar(50) NOT NULL,
                                        TypeConfig_IsVisible bit NOT NULL,
                                        CONSTRAINT pk_TypeConfigID PRIMARY KEY (TypeConfig_ID)
                                    )";

            localCmd.ExecuteNonQuery();
            #endregion

            using (SqlConnection sourceCnx = new SqlConnection(SOURCE_CONN_STRING))
            {
                try
                {
                    sourceCnx.Open();

                    SqlCommand SourceCmd = sourceCnx.CreateCommand();
                    SourceCmd.CommandText = "SELECT * FROM t_TypeConfig";
                    SqlDataReader reader = SourceCmd.ExecuteReader();

                    using (SqlCeBulkCopy bulkCopy = new SqlCeBulkCopy(LOCAL_CONN_STRING))
                    {
                        bulkCopy.DestinationTableName = "t_TypeConfig";

                        try
                        {
                            // Write from the source (DB server) to the destination (local wibe)
                            bulkCopy.WriteToServer(reader);
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.ToString(), "An error occurred", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                        finally
                        {
                            reader.Close();
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString(), "An error occurred", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                finally
                {
                    sourceCnx.Close();
                }
            }
        }
        catch(Exception ex)
        {
            MessageBox.Show(ex.ToString(), "An error occurred", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
        finally
        {
            localCnx.Close();
        }
    }
  • SQL Server CE 파일 및 샘플 테이블 ( t_TypeConfig ) -> 확인을 만듭니다.
  • SQL Server 연결 -> 확인에서 판독기로 데이터를 가져옵니다.

그러나 SqlCeBulkCopy 를 통해 SqlCeBulkCopy 이전에 채운 독자가있는 로컬 데이터베이스 테이블을 채우기를 원할 때 Visual Studio 관측자를 통해 reader 에 데이터가 더 이상 포함되어 있지 않은지 확인합니다.

나는 이유를 모른다. 솔루션을 찾고 있지만 이해가되지 않습니까? 아마 사용하기 때문에?

또한 SqlDataReaderSqlCeDataReader 변수로 변환하여 SqlCeBulkCopy.WriteToServer() 매개 변수를 제공하려고 시도했지만 하나에서 다른 것으로 변환 할 수 없습니다.

어떤 아이디어?

고마워.

헬캣.

수락 된 답변

좋아요 그래서 해결책은, 주석들, 덕분에 매개 변수로 제공합니다 SqlCeBulkCopy.WriteToServer() DataTable 대신 SqlDataReader 또는 IDataReader . 지금 당장 나를 위해 일한다.

추가 :

SqlDataReader reader = SourceCmd.ExecuteReader();
DataTable SqlDatatable = new DataTable();
SqlDatatable.Load(reader);

다음 :

bulkCopy.WriteToServer(SqlDatatable);

고마워.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.