SSIS資料型態異常處理

2013年12月9日 星期一

最近遇到的問題是

tableA丟資料到tableB發生小數點異常0.12345—>0.12

例:

Table 欄位 型態
tableA grossProfit decimal(32,5) 0.12345
tableB grossProfit decimal(32,5) 0.12

 

原來是用OLEDB來源元件抓取資料時,該元件自動將tableA.grossProfit欄位判斷為”有效位數32,小數位數2”

才會有這種自動截斷的情況。

 

解決方法:

先在元件上按右鍵—>顯示進階編輯器—>輸入與輸出屬性頁籤—>OLEDB來源輸出—>輸出資料行—>選取該欄位

並修改1.Precision(有效位數)2.Scal(小數位數),改成32,5節可。

Read more...

程式碼命名與撰寫規範

2013年11月19日 星期二

先筆記下來,有時間再來整理。

 

參考資料:

http://msdn.microsoft.com/zh-tw/library/ms229002(v=vs.100).aspx

http://www.dotblogs.com.tw/regionbbs/archive/2009/09/06/codingstandards.aspx

Read more...

好用的大量新增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...

SQL 條件式

2013年7月28日 星期日

在t-sql裡也是可以寫條件式,方法如下:

if not exists (select * from user where userid=’neil’)

begin

select '第一個判斷式’

end

else if  not exists (select * from user where userid=’neil01’)

begin

select ‘第二個判斷式’

end

else

begin

select ‘第三個判斷式’

end

Read more...

IoC and DI

2013年6月27日 星期四

參考資料

1.http://www.dotblogs.com.tw/hatelove/archive/2009/10/02/10894.aspx  說明

2.http://www.dotblogs.com.tw/clark/archive/2010/11/29/19772.aspx   圖示資料

3.http://blog.csdn.net/code6421/article/details/1282139

Read more...

ReportingService在每一頁重複標頭資料列

2013年6月21日 星期五

用VisualStudio 2010做報表時,當我們想要讓每頁表頭都可以看到時,需要做以下設定:

image

image

 

看起來很簡單,但是效果確出不來@@

 

解決方法:在rdlc報表上按右鍵,編輯

 

         <TablixRowHierarchy>
<TablixMembers>
<TablixMember>
<KeepWithGroup>After</KeepWithGroup>
<RepeatOnNewPage>true</RepeatOnNewPage>
</TablixMember>
<TablixMember>
<Group Name="詳細資料" />
</TablixMember>
</TablixMembers>
</TablixRowHierarchy>


 



只要加入<RepeatOnNewPage>true</RepeatOnNewPage>即可,試試看吧。

Read more...

Visual Studio 2010 單鍵發行簡單使用 Web.Release.config

2013年6月13日 星期四

參考網址http://demo.tc/Post/661

待編輯….

Read more...

ASP.NET Session 遇到問題

2013年5月27日 星期一

今天同事遇到使用Session發生的錯誤,錯誤訊息如下:

無法序列化工作階段狀態。在 'StateServer' 和 'SQLServer' 模式中,ASP.NET 將序列化工作階段狀態物件,因此不允許無法序列化的物件或 MarshalByRef 物件。在 'Custom' 模式中,自訂工作階段狀態存放區執行類似的序列化作業時,也會有同樣的限制

神奇的是在他本機上不會遇到,但在測試機上會出錯。

查詢後原來ASP.NET的Session是除了Server外還可以存在其他地方,如下方說明:

每個選項是由 SessionStateMode列舉型別中的值識別。 下列清單描述可用的工作階段狀態模式:

  • InProc 模式,此模式會將工作階段狀態存放在 Web 伺服器的記憶體中。 這是預設值。

  • StateServer 模式,此模式會將工作階段狀態儲存在稱為 ASP.NET 狀態服務的個別處理序中。 這樣可以確保工作階段狀態在 Web 應用程式重新啟動時保留下來,並且讓 Web 伺服陣列中的多個 Web 伺服器都能夠使用工作階段狀態。

  • SQLServer 模式,此模式會將工作階段狀態儲存在 SQL Server 資料庫中。 這樣可以確保工作階段狀態在 Web 應用程式重新啟動時保留下來,並且讓 Web 伺服陣列中的多個 Web 伺服器都能夠使用工作階段狀態。

  • Custom 模式,此模式可讓您指定自訂儲存提供者 (Provider)。

  • Off 模式,此模式會停用工作階段狀態。

參考來源:http://msdn.microsoft.com/zh-tw/library/ms178586(v=vs.100).aspx

 

會發生錯誤的那台Session模式為:StateServer,但卻沒有序列化(Serializable)

解決方法:自訂類別加一個Serializable屬性標記[Serializable]。

[Serialzable]
public class getData
{
//取得資料
}




延伸閱讀:



1.在 ASP.NET 網站使用 Session 時,常常因為 web.config 修改或更新 Bin\ 目錄下的 dll 而導致 Session 消失,Session 常常消失"也挺惱人的,不是導致突然被自動登出,就是發生非預期的 Exception ... 等。



可以參考保哥這篇"如何讓 ASP.NET 使用 Session 資料時不要再自動消失"



2."觀察ASP.NET State Server的資料傳輸時機"



3.web.config SessionState配置詳解

Read more...

json資料處理

2013年5月8日 星期三

Dictonary<string,string>資料處理回傳

{"d":{"0":"第一項","1","第二項","2":"第三項"}}

jQuery.ajax({
type:"POST",
url:"xxx.asmx/getxxx",
cache:false,
async:false,
contentType:"application/json;charset=utf-8",
success:function(dt){
$(dt.d).each(function(i,val){
$.each(val,function(k,v){
alert("key:" + k + "value:" + v);
});
});
}
})


通常取回來的資料用dt.d.length就可取到資料長度,但這個例子是取不到的



必需要用$(dt.d).each來取得,至於為什麼呢?在找時間來查查看

Read more...

解決FireFox不支援event.keycode方法

偵測鍵盤上key入判斷,通常在ie上用window.event,但是這個方法在FireFox上卻不支援

這就是開發網頁工程師的困擾了,為什麼這麼多瀏覽器不統一規格呢?

就連IE6~10,各版本會有不相容的問題..Orz

回歸正題啦,加入一下判斷就可以啦!!

 

function onKeyPressBlockNumbers(e)
{
var key = window.event ? e.keyCode : e.which;
var keychar = String.fromCharCode(key);
reg = /\d/;
return !reg.test(keychar);
}

Read more...

啟用方案總管中追蹤現用項目方法

2013年5月7日 星期二

 

 

開啟追蹤現有項目工具=>選項=>專案和方案=>勾選在方案總管中追蹤現用項目 image_20

Read more...

C#存取修飾詞

2013年4月23日 星期二

宣告 定義
public 無存取能力限制
private 存取能力限制於同一類別(Class)內
internal 存取能力限制於同一組件(Project)內
protected 存取能力限制於同一類別或是繼承的類別
protected internal 存取能力限制於同一類別、繼承的類別,或是同一組件內的類別

 

如何使用呢?

型別 型別可宣告修飾詞 成員可宣告修飾詞
class ‧public
‧internal
‧public
‧private
‧internal
‧protected
‧protected internal
struct ‧public
‧internal
‧public
‧private
‧internal
enum ‧public
‧internal
‧不使用
interface ‧public
‧internal
‧不使用
delegate ‧public
‧internal
‧不使用

預設值

宣告 預設值
命名空間 public
類別 internal
成員 private

圖片說明:

 

p200882212174

參考:

http://msdn.microsoft.com/zh-tw/library/ms173121(v=vs.100).aspx

http://www.cnblogs.com/weihai2003/archive/2008/10/24/1319003.html

http://www.wretch.cc/blog/kaezorr/4761263

Read more...

Web From 擷圖

2013年3月14日 星期四

今天主管要評估一個需求,那就是可不可以做跟PChome一樣,可以把網頁畫面擷取下來存成圖檔 於是就展開了一段漫長的尋找,雖然網路上也一些api可以用,但我還是找到方法 原理:先載入要擷圖的url,在利用window.from的WebBrowser元件來將網頁轉成圖片 來看一下code 吧

protected void btn1_Click(object sender, EventArgs e)
{
string url = "http://tw.yahoo.com";
Bitmap bitmap = new Bitmap(CaptureWebPage(url));
Response.ContentType = "image/jpeg";
bitmap.Save(Response.OutputStream, ImageFormat.Jpeg);
bitmap.Dispose();
Response.End();
}

public System.Drawing.Bitmap CaptureWebPage(string URL)
{
// create a hidden web browser, which will navigate to the page
System.Windows.Forms.WebBrowser web = new System.Windows.Forms.WebBrowser();
// we don't want scrollbars on our image
web.ScrollBarsEnabled = false;
// don't let any errors shine through
web.ScriptErrorsSuppressed = true;
// let's load up that page!
web.Navigate(URL);

// wait until the page is fully loaded
while (web.ReadyState != WebBrowserReadyState.Complete)
System.Windows.Forms.Application.DoEvents();
System.Threading.Thread.Sleep(1500); // allow time for page scripts to update
// the appearance of the page

// set the size of our web browser to be the same size as the page
int width = web.Document.Body.ScrollRectangle.Width;
int height = web.Document.Body.ScrollRectangle.Height;
web.Width = width;
web.Height = height;
// a bitmap that we will draw to
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(width, height);
// draw the web browser to the bitmap
web.DrawToBitmap(bmp, new System.Drawing.Rectangle(0, 0, width, height));

return bmp; // return the bitmap for processing
}


執行後會發生"無法產生 ActiveX 控制項 '8856f961-340a-11d0-a96b-00c04fd705a2',因為目前的執行緒不是在單一執行緒 Apartment。" 的問題 “



解決方法,可以至.aspx 加入 AspCompat=”ture



<%@ Page Title="首頁" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"

    CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default"  AspCompat="true"%>

Read more...

避免巢狀判斷式

2013年3月8日 星期五

通常我們在學程式設計時,會用到if else 

寫久了就會習慣這樣寫

int period = int.Parse(installment);
if(period>1)
{
var list = getList();
if(list.count()>1)
{
//資料處理
}

}


這樣寫是沒有問題的,但是在閱讀上會比較沒這麼清楚



 



那可以怎麼改呢?接我們繼續看下去…



int period = 0;
if(!int.TryParse(installment, out period))
{
continue;
}

if(period<=1)
{
continue;
}


//資料處理


做法修改為上面先做驗證,下方才進行資料處理動作,這樣看是不是就清楚多了呢?

Read more...

Javascript 存取物件屬性的方式

2013年2月28日 星期四

在取動態物件時會需要用到

JavaScript 有兩種方式可以用來存取物件屬性,假設我們有以下這個物件:

var myObject = {
att1: '123',
att2: '456',
func1: function () {},
func2: function () {}
}


第一種存取的方法是用 JavaScript 的物件屬性存取子「句點 (.) 」:



myObject.attr1;
myObject.attr2;
myObject.func1();
myObject.func2();

第二種方法是利用關聯索引來存取:

myObject['attr1'];
myObject['attr2'];
myObject['func1']();
myObject['func2']();

為什麼要有第二種方法呢?這就是今天的主題了,如果今天我要動態存取物件屬性要怎麼做呢?




動態存取



找出myObject 物件裡的各項屬性,可以用以下的方法



for (var attrName in myObject) {
alert(attrName + ':' + 每個屬性的值);
}


這裡 attrName 會依序是 attr1, attr2, func1, func2 ,那麼我們怎麼抓到每個屬性的值呢?



那就是用第二種方法:



for (var attrName in myObject) {
alert(attrName + ':' + myObject[attrName]);
}


在這裡 attrName 會自動轉型成字串,用來當做關聯索引的值,也讓我們能夠存取到 myObject 物件裡對應的資訊。



那為什麼不能用第一種方法呢?



for (var attrName in myObject) {
alert(attrName + ':' + myObject.attrName); // myObject.attrName 可以嗎?
}

因為 JavaScript 規定在句點後面不能接上一個變數,所以如果我們用 myObject.attrName 的話,會被 JavaScript 解釋成要存取 myObject 的 attrName 屬性。

那可以用eval嗎?



for (var attrName in myObject) {
alert(attrName + ':' + eval('myObject.' + attrName));
}

儘可能別用eval,因為他會拖慢速度,所以還是用第二種方式就好啦。

Read more...

$(window).scrollTop() vs. $(document).scrollTop()

2013年2月19日 星期二

筆記一下

They are both going to have the same effect.

Both scroll to the top of the object, an html document is considered the "document" thus scrolling to the top of the html page. A "window" object is created with each frame, thus your main window is one frame, if you had an "iframe" that would create another window object. So your just scrolling to the top of the window object, creating the same effect.

It seems that the window object is buggy when it comes to this. It apprently does not work in IE8 and Opera, so it is best to use $("html").scrollTop().

所以最好是用$("html").scrollTop().可支援多瀏覽器

 

 

 

 

資料來源:http://stackoverflow.com/questions/5371139/window-scrolltop-vs-document-scrolltop

Read more...

Cursor

2013年1月8日 星期二

Cursor可以看成是一個存資料集的物件,並且可以將資料一筆一筆取出來處理。

http://www.dotblogs.com.tw/lastsecret/archive/2010/06/18/15954.aspx

Read more...