好用的大量新增SqlBulkCopy

2013年11月12日 星期二

最近工作上遇到的問題

公司有用ga分析,每天都需要把資料抓取下來,由於早期同事寫的語法為

一筆一筆的insert into,效率實在是不太好,現在有更好用的SqlBulkCopy可以用了,請參考以下範例。

 //一開始我們先產生一個DataTable來裝我們要寫入的資料 
DataTable dt = new DataTable();
dt.Columns.Add("id", typeof(int));
dt.Columns.Add("name", typeof(string));

//因為SqlBulkCopy的猛就是大量的一次寫入,所以我們也來跑10萬筆吧
int i;
for (i = 0; i < 100000; i++)
{
DataRow dr = dt.NewRow();
dr["name"] = i.ToString();
dt.Rows.Add(dr);
}

//宣告連結字串
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DBConnectionString1"].ConnectionString);

conn.Open();
//宣告SqlBulkCopy
using (SqlBulkCopy sqlBC = new SqlBulkCopy(conn))
{
//設定一個批次量寫入多少筆資料
sqlBC.BatchSize = 1000;
//設定逾時的秒數
sqlBC.BulkCopyTimeout = 60;

//設定 NotifyAfter 屬性,以便在每複製 10000 個資料列至資料表後,呼叫事件處理常式。
sqlBC.NotifyAfter = 10000;
sqlBC.SqlRowsCopied += new SqlRowsCopiedEventHandler(OnSqlRowsCopied);

//設定要寫入的資料庫
sqlBC.DestinationTableName = "dbo.Table1";

//對應資料行
sqlBC.ColumnMappings.Add("id", "id");
sqlBC.ColumnMappings.Add("name", "name");

//開始寫入
sqlBC.WriteToServer(dt);
}
conn.Dispose();


 



參考資料:



http://king971119.blogspot.tw/2010/12/c-sqlbulkcopy.html



http://msdn.microsoft.com/zh-tw/library/system.data.sqlclient.sqlbulkcopy(v=vs.110).aspx

Read more...

SyntaxHighLighter 3.0.83 高亮程式碼 在Google Blogger使用方法

目前最新版本為3.0.83

官方網站:http://alexgorbatchev.com/SyntaxHighlighter/

 

使用方法

1.進入管理後台—>範本—>編輯HTML

<link href='http://alexgorbatchev.com/pub/sh/current/styles/shCoreDefault.css' rel='stylesheet' type='text/css'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shAutoloader.js' type='text/javascript'/>


2.版本設置—>新增小工具—>選取Html/Javascript



<style>
.highlightsetting {
overflow-y: hidden !important; /*修正右側滾動條之BUG*/
border: 1px solid #2187BB; /*加入程式碼邊框*/
}
.syntaxhighlighter table td.gutter .line, .syntaxhighlighter table td.code .line {
padding: 0 13px !important; /*修正行號距離*/
}
</style>
<script type='text/javascript'>
function path() {
var args=arguments, result=[];
for(var i=0;i<args.length;i++)
result.push(args[i].replace('@', 'http://alexgorbatchev.com/pub/sh/current/scripts/'));
return result;
}
SyntaxHighlighter.autoloader.apply(null, path(
'applescript @shBrushAppleScript.js',
'actionscript3 as3 @shBrushAS3.js',
'bash shell @shBrushBash.js',
'coldfusion cf @shBrushColdFusion.js',
'cpp c @shBrushCpp.js',
'c# c-sharp csharp @shBrushCSharp.js',
'css @shBrushCss.js',
'delphi pascal @shBrushDelphi.js',
'diff patch pas @shBrushDiff.js',
'erl erlang @shBrushErlang.js',
'groovy @shBrushGroovy.js',
'java @shBrushJava.js',
'jfx javafx @shBrushJavaFX.js',
'js jscript javascript @shBrushJScript.js',
'perl pl @shBrushPerl.js',
'php @shBrushPhp.js',
'text plain @shBrushPlain.js',
'py python @shBrushPython.js',
'ruby rails ror rb @shBrushRuby.js',
'sass scss @shBrushSass.js',
'scala @shBrushScala.js',
'sql @shBrushSql.js',
'vb vbnet @shBrushVb.js',
'xml xhtml xslt html @shBrushXml.js'
));
SyntaxHighlighter.defaults['toolbar']=false; //隱藏問號按鈕
SyntaxHighlighter.defaults['class-name']='highlightsetting'; //自定義CSS設置
SyntaxHighlighter.defaults['auto-links']=false; //超連結設定顯示為文字
SyntaxHighlighter.config.space=' '; //消除Chrome複製時的BUG空白
SyntaxHighlighter.config.stripBrs=false; //略過Blogger之br標籤
SyntaxHighlighter.all();
</script>


參考來源:http://qqboxy.blogspot.com/2010/05/syntaxhighlighter.html



使用方式



程式加入方法:



<pre class="brush: 填入程式語言代碼"> 
您的程式碼請貼此處。
</pre>


填入程式語言代碼有



  'applescript            @shBrushAppleScript.js',
'actionscript3 as3 @shBrushAS3.js',
'bash shell @shBrushBash.js',
'coldfusion cf @shBrushColdFusion.js',
'cpp c @shBrushCpp.js',
'c# c-sharp csharp @shBrushCSharp.js',
'css @shBrushCss.js',
'delphi pascal @shBrushDelphi.js',
'diff patch pas @shBrushDiff.js',
'erl erlang @shBrushErlang.js',
'groovy @shBrushGroovy.js',
'java @shBrushJava.js',
'jfx javafx @shBrushJavaFX.js',
'js jscript javascript @shBrushJScript.js',
'perl pl @shBrushPerl.js',
'php @shBrushPhp.js',
'text plain @shBrushPlain.js',
'py python @shBrushPython.js',
'ruby rails ror rb @shBrushRuby.js',
'sass scss @shBrushSass.js',
'scala @shBrushScala.js',
'sql @shBrushSql.js',
'vb vbnet @shBrushVb.js',
'xml xhtml xslt html @shBrushXml.js'


如果是用Windows Live Writer,可以用外掛小工具



網站:http://precode.codeplex.com/



用法請參考:http://fundesigner.net/wlw-precode/

Read more...

兩台 Server 透過 UNC 上傳時發生「拒絕存取路徑」的問題

2013年10月22日 星期二

剛好遇到做一下筆記 Server建立了虛擬目錄指向NAS機器(UNC),Web在存取出現"拒絕存取路徑" UNC用特定可以存取的帳號,但確還不行, 解決方法: 在 webconfig 指定 即可解決 參考來源 http://social.msdn.microsoft.com/Forums/zh-TW/804690ab-78df-44a9-9709-10c89f923e0b/-server-unc-?forum=236

Read more...

如何新增資料表中有Identity欄位

2013年10月7日 星期一

在補資料時當遇到Identity欄位時,會發生以下錯誤:

訊息 544,層級 16,狀態 1,行 1
當 IDENTITY_INSERT 設為 OFF 時,無法將外顯值插入資料表 'bt_test' 的識別欄位中。

 

用以下方法則可解決

 

 

Create Procedure spx_identityinsert
(
@dbName VARCHAR(100),
@schemaName varchar(100),
@tableName VARCHAR(100),
@insertSql Varchar(MAX)
)
AS
BEGIN

Declare @sql varchar(MAX)
if(OBJECTPROPERTY(OBJECT_ID(@dbName +'.'+@schemaName +'.'+@tableName ,'U'),'TableHasIdentity') > 0)
Begin
Set @sql = 'SET IDENTITY_INSERT ' + @dbName+'.'+@schemaName+'.'+@tableName+ ' ON;'
Set @sql = @s + @insertSql
Set @sql = @s + 'SET IDENTITY_INSERT ' + @dbName+'.'+@schemaName+'.'+@tableName+ ' OFF;'
Execute(@sql)
End

END
Go;

/*執行範例:*/
Exec usp_identityinsert 'MyTestDB','dbo','bt_test','Insert into tb_test (id,name) values (9,''neil'')' /*塞字串要跳脫字元*/

Read more...

解決 VMware 出現 "Failed to lock the file" 的錯誤

2013年10月1日 星期二

VMware出現Failed to lock the tile導致開不了VM

錯誤訊息:

cannot open the disk '*.vmdk' or one of the snapshot disk is depends on.
Reason: Failed to lock the file.


 



解決方法如下:



進到 VMware 的資料夾,將所有的 *.lck 資料夾或檔案刪除



就可以解決啦!!

Read more...

亂數

2013年9月25日 星期三

取出0~999亂數,格式補零。 

Random r = new Random((int)DateTime.Now.Ticks);
string randomStr = r.Next(0,999).ToString().PadLeft(4,'0');
Response.Write(randomStr);

Read more...

EnableViewState狀態

2013年9月9日 星期一

今天遇到一個問題在刷卡頁面,填完卡號送出時,出現格式不正確之問題

查了一下,發現為了要在post後不留卡號所以把EnableViewState=”false”

所以在送出時PostBack會找不到所選的日期,轉型時發生的問題。

至於什麼時候可以關掉呢?有時間再來查詢一下囉。

MSDN說明:EnableViewState 屬性設定為 false,這將會停用 Page 物件的檢視狀態,表示網頁的檢視狀態資訊和網頁包含的控制項都不會儲存起來。

 

參考來源:http://msdn.microsoft.com/zh-tw/library/system.web.ui.page.enableviewstate.aspx

Read more...