2010年12月27日月曜日

T-SQL 文字列の長さをいじろう

長さ、文字コード、類似性、識別子関連の関数一覧











関数名戻り値説明
LEN数値(入力値依存)文字数を返します
DATALENGTH数値(入力値依存)引数式に必要なバイト数を返します
ASCIIintASCIIコードを返します
CHARchar(1)ASCIIコード(0~255)を文字に変換します
UNICODEint指定した文字に対応するUnicodeの整数コードを返します
NCHARnchar(1)整数コード(0~65535)からUnicode文字を返します
SOUNDEXvarchar発音の似た単語を見つけるために、英数字の文字列を4文字のコードに変換します
DIFFERENCEint音の似た単語の類似度を0~4の数字で返します。4:類似性高、0:類似性低
QUOTENAMEnvarchar(258) SQL Server識別子を作成します


http://journal.mycom.co.jp/articles/2008/10/22/tsql/002.html

2010年12月15日水曜日

decimal 型と numeric 型 のバイトサイズ







有効桁数ストレージのバイト サイズ
1 - 95
10-199
20-2813
29-3817




http://msdn.microsoft.com/ja-jp/library/ms187746.aspx
http://social.msdn.microsoft.com/Forums/ja-JP/sqlserverja/thread/5e69eb1a-e7c7-42c4-b8bd-f17fe17c971e/

2010年12月2日木曜日

WS2008でデスクトップにマイコンピュータのアイコンを出す

"C:\Windows\system32\rundll32.exe" shell32.dll,Control_RunDLL desk.cpl,Web,0

2010年10月28日木曜日

C# 指定したファイルをOS標準のアプリで開く

//"C:\My Documents\My Pictures"を表示
System.Diagnostics.Process.Start(@"C:\My Documents\My Pictures");

2010年10月15日金曜日

T-SQL の ストアドの outputパラメータをadoで受ける

Dim cmd As New ADODB.Command
Dim rs As ADODB.Recordset

cmd.CommandType = adCmdStoredProc
cmd.CommandText = "[ストアド名]"
Set cmd.ActiveConnection = CurrentProject.Connection
cmd.Parameters.Append cmd.CreateParameter(, 型名, adParamInput, , パラメータの値)
cmd.Parameters.Append cmd.CreateParameter("hoge", 型名, adParamOutput)
Set rs = cmd.Execute

'
'ここでcmd.Executeで取得した値が削除される場合があるため
'rsに代入しておくことにより回避する
'

value = cmd.Parameters(index)

2010年10月13日水曜日

2010年5月19日水曜日

ストアドからストアド

・戻り値がない場合
EXECUTE [dbo].[P_Stored1] 'testdata1';

・戻り値がある場合
DECLARE @return_value int
EXEC @return_value = [dbo].[[P_Stored2] 'testdata2'
SELECT 'Return Value' = @return_value

一時表と動的SQL

DECLARE @sql nvarchar(1024); -- 実行するSQL文を入れます
DECLARE @tab_name nvarchar(16) = 'table1';
-- 入れる一時表を作ろう
CREATE TABLE #TMPTABLE (
chars nvarchar(4000) NULL
);
-- SQL文を作る
SET @sql = 'INSERT #TMPTABLE ';
SET @sql = @sql + 'FROM ' + @tab_name;
-- 実行する
execute (@sql);

CSVファイルの内容をDBに登録する

-- oracleのUTL_FILEみたいなやつは存在しないようです

BULK INSERT dbo.table1 FROM '\\SERVER1\Directory\CSVFILE.CSV'
WITH (
DATAFILETYPE = 'char',
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)


http://msdn.microsoft.com/ja-jp/library/ms188365.aspx

2010年5月18日火曜日

コンボボックスでほしいモノを検索して選択する

// コンボボックス:combo1 がテーブル:TABLE1 にバインドしており、
// カラム:COL1 の値が collumnvalue のものを選択させたいとき

int intPosition = this.tABLE1BindingSource.Find("COL1", collumnvalue);
if (intPosition == -1) { return; }
this.combo1.SelectedIndex = intPosition;

2010年5月13日木曜日

Fillしたデータを直接読み取る(複数行)

// Fillする
tABLEAdapter1.Fill(DataSet1.Table1);
// レコードセット(?)を取る
DataRowCollection drc1 = (DataRowCollection)dATASet.TABLE1.Rows;
// 一行ずつ読み取る
for (int i = 0; i < drc1.Count; i++)
{
DATASet.TABLE1Row drc2 = (DATASet.TABLE1Row)drc1[i];
Console.WriteLine(drc2.collumnname.ToString());
}

2010年5月10日月曜日

Fillしたデータを直接読み取る(単数行)

// Fillする
tABLEAdapter1.Fill(DataSet1.Table1);
// レコードセット(?)を取得
DataSet1.TABLE1Row rs = (DataSet1.TABLE1Row)((DataRowView)this.tABLE1BindingSource.Current).Row;
// レコードセットを参照する
Console.WriteLine(rs.collumnname.ToString());

2010年4月21日水曜日

SQL server 2008 のバックアップを復元できない

ユーザーが違うと復元できなくなる設定があるらしい

コンパネ > サービス で、SQLサーバーのプロパティの
ログオン タブで、ローカルシステムアカウントにチェックを入れるらしい

http://hadairotype.blog64.fc2.com/blog-entry-17.html

2010年4月20日火曜日

C#でのフォームやらコントロールやらの位置

フォームの位置と大きさ


フォームの位置を変更する
this.Location = new Point(10, 10);


フォームの位置をデスクトップ座標で変更する
this.SetDesktopLocation(10, 50);

this.DesktopLocation = new Point(10, 50);

(どっちども同じ)


フォームの位置とサイズを変更する
//位置と大きさを変更(BoundsSpecified.Allは省略可能)
this.SetBounds(10, 50, 200, 100, BoundsSpecified.All);
//位置だけ変更
this.SetBounds(10, 50, 200, 100, BoundsSpecified.Location);
//大きさだけ変更
this.SetBounds(10, 50, 200, 100, BoundsSpecified.Size);
//幅だけ変更
this.SetBounds(10, 50, 200, 100, BoundsSpecified.Width);
//高さだけ変更
this.SetBounds(10, 50, 200, 100, BoundsSpecified.Height);
//X座標だけ変更
this.SetBounds(10, 50, 200, 100, BoundsSpecified.X);
//Y座標だけ変更
this.SetBounds(10, 50, 200, 100, BoundsSpecified.Y);
//変更しない
this.SetBounds(10, 50, 200, 100, BoundsSpecified.None);


もしくは
this.Bounds = new Rectangle(10, 50, 200, 100);

2010年4月1日木曜日

BindingSourceのFind

tableadapterをFillしてたら、検索ができます

// つかいかた
BindingSource01.Find([検索するカラム名(string型でOK)], [検索する値(string型でOK)]);

これで、Positionが int型で返ってくる

// 使ってみた
int intPosition = this.t_M_得意先くくりBindingSource.Find("くくりID", this.くくりIDTextBox.Text);
if (intPosition == -1) { return; }
Console.WriteLine( this.cCSLOGISTICSDataSet.T_M_得意先くくり.Rows[intPosition].ItemArray[0].ToString());

2010年3月18日木曜日

テーブルの型を変更できないとき SQL-server2008

SQL Server 2008 でテーブルを保存するときにエラー メッセージ "変更の保存が許可されていません" が表示される

1. SQL Server Management Studio (SSMS) を開きます。
2. [ツール] メニューの [オプション] をクリックします。
3. [オプション] ウィンドウのナビゲーション ウィンドウで、[Designers] をクリックします。
4. [テーブルの再作成を必要とする変更を保存できないようにする] チェック ボックスをオンまたはオフにして、[OK] をクリックします。

http://support.microsoft.com/kb/956176/ja

2010年3月5日金曜日

カスタムプロパティ

// リスト選択型のプロパティ
public enum enumTest{a = 10,b = 20};
[Category("Design")]
[Description("テスト")]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
private enumTest et;
public enumTest TestProperty
{
set { et = value; }
get { return et; }
}

// ツリー型のプロパティ
private Size st;
[Category("Design")]
[Description("テスト2")]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
public Size TestProperty2
{
set { st = value; }
get { return st; }
}

2010年3月3日水曜日

今走っているメソッドを知る!!

方法①
System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
Console.WriteLine(st.GetFrame(0).ToString());

方法②
Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().Name);

エラーログなんかで便利そう

2010年2月6日土曜日

2010年2月3日水曜日

C# マウス関係

マウスポインタ(カーソル)の動作

//待機状態
Cursor.Current = Cursors.WaitCursor;
//5秒間停止する
System.Threading.Thread.Sleep(5000);
//元に戻す
Cursor.Current = Cursors.Default;


マウスポインタの位置の取得と設定

//マウスポインタの位置を取得
Console.WriteLine("マウスポインタのX座標:" +
System.Windows.Forms.Cursor.Position.X.ToString());
Console.WriteLine("マウスポインタのY座標:" +
System.Windows.Forms.Cursor.Position.Y.ToString());

//マウスポインタの位置を画面左上(座標(0,0))にする
System.Drawing.Point p = new System.Drawing.Point(0, 0);
System.Windows.Forms.Cursor.Position = p;

// マウス・カーソルのスクリーン座標での位置を取得
Console.WriteLine(Cursor.Position.ToString());

// フォームを基準に(スクリーン座標を)クライアント座標に変換
Point formClientCurPos = this.PointToClient(Cursor.Position);
Console.WriteLine(formClientCurPos.ToString());

2010年2月1日月曜日

T-SQL カーソルを削除

DEALLOCATE [カーソル名]

2010年1月29日金曜日

SQLServerでCSVファイルをテーブルにインポートする

1. インポート元の CSVファイル と、インポート先のテーブルを用意する

2. サーバーにadministratorでログインして、コマンドプロンプトで以下のコマンドを叩く
bcp (データベース名) format nul -c -x -f (保存するファイル名) -t -U (データベースユーザー名)
例:
>bcp FILEREAD.dbo.T_TEST02 format nul -c -x -f 'D:\Backup\bulk-test02.Xml' -t -U sa

3. パスワードを聞いてくるので、パスワードを打つ
(指定したファイル名でフォーマットファイルが出来る)

4. 以下のようにすると、テーブルと同様に扱える
OPENROWSET(BULK [インポート元のCSVファイル],[上で作ったフォーマットファイル]) AS [名前(なんでもいい)]
例:
INSERT INTO T_TEST02
SELECT a.* FROM OPENROWSET(BULK 'D:\test.csv',FORMATFILE = 'D:\BACKUP\bulk-bulk-test02.Xml') AS a;

T-SQL 文字列の中から一致する部分を抽出

構文
PATINDEX ( '%pattern%' , expression )

解説
expression から、pattern に一致する部分を検索して、その先頭の文字の位置を返す

引数
pattern : 検索する文字列
expression : 検索される文字列

返り値
一致した文字列の先頭の文字の位置(1文字目は1)
一致する文字列がない場合は 0 
注意
oracleのinstr関数と引数の順番が違うので注意!!!

2010年1月26日火曜日

C# カスタムコントロールのプロパティを作る

///
/// コントロールの状態を保存する変数を書く
///

private bool designVisibleView = true;

///
/// プロパティの説明を書く
///

[Category("Design"), DefaultValue(true)] ← プロパティの型によって異なる
[Description("内容をここに書く")]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
public bool VisibleView
{
set
{
designVisibleView = value;
this.panelView.Visible = designVisibleView;
}
get { return designVisibleView; }
}

・直接コントロールのVisibleに値を設定/参照すると、使用側フォームなどで値が保持されない場合がある。
・DesignerSerializationVisibility.Visible = インスタンスごと保存される。
・DesignerSerializationVisibility.Content = インスタンスの変更されたプロパティだけが保存される。
・DesignerSerializationVisibility.Hidden = プロパティは保存されない。

C# でカスタムコントロールを作る

http://msdn.microsoft.com/ja-jp/events/dd279486.aspx

ビルドするとツールボックスに入るのだ~~

2010年1月25日月曜日

C# try~catch~finally

FormatException()は例外の種類らしいがよくわからん

try
{
[通常の処理]
// 例外を強制的に発生させる
throw new FormatException();
// コレでcatchに飛ぶ
}
catch (Exception exp)
{
[例外時の処理]
}
finally
{
[例外が発生しようがしまいが処理する内容]
}

C# 文字列の検索

// 必要な変数を宣言する
string stTarget = "ABCDEDCBA";

// 先頭から 'D' を検索し、見つかった位置を取得する
int iFind1 = stTarget.IndexOf('D');

// 3 文字目の後から 'C' を検索し、見つかった位置を取得する
int iFind2 = stTarget.IndexOf('C', 3);

// 6 文字目の後から 2 文字目の中で "CB" を検索し、見つかった位置を取得する
int iFind3 = stTarget.IndexOf("CB", 6, 2);


// 末尾から 'D' を検索し、見つかった位置を取得する
int iFind1 = stTarget.LastIndexOf('D');

// 6 文字目の後から "CDE" を検索し、見つかった位置を取得する
int iFind2 = stTarget.LastIndexOf("CDE", 6);

// 7 文字目の後から 2 文字目の中で "CB" を検索し、見つかった位置を取得する
int iFind3 = stTarget.LastIndexOf("CB", 7, 2);

2010年1月21日木曜日

C# ListView コントロール内の項目を選択する

this.listview01.Items[3].Selected = true;

2010年1月20日水曜日

C# Dataset コンボボックスで選択された内容を扱う

// 選択されたアイテムを取る
System.Data.DataRowView view01 = (DataRowView)this.cbo01.SelectedItem;
// 内容を変数に取る
string str01 = view01.Row.ItemArray[0].ToString(); // 文字列を str01に 格納
int int01 = int.Parse(view01.Row.ItemArray[3].ToString()); // 数値を int01 に格納

2010年1月19日火曜日

IDENTITYのリセット

DBCC CHECKIDENT ([テーブル名] ,RESEED ,[次に入ってほしい数字の前の数字])

ex:
DBCC CHECKIDENT (T_MST_得意先 ,RESEED ,0)
テーブル:T_MST_得意先 に設定されているIDENTITY列が0の次から始まるようになる

2010年1月18日月曜日

DataSetで謎のエラー :制約を有効にできませんでした・・・・

エラーメッセージ
「制約を有効にできませんでした。行に入力できるのは、Null 以外の値、一意な値、あるいは外部キーですが、この制約の違反が 1 つ以上の行で発生しています。」

原因
 データベースのプロパティを変更した(だけ)

対処
 DataSetのプロパティも変更する

2010年1月6日水曜日

T-SQLのエラー処理時のパラメータ

BEGIN TRY
SELECT 1/0;
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber 
,ERROR_SEVERITY() AS ErrorSeverity
,ERROR_STATE() AS ErrorState
,ERROR_PROCEDURE() AS ErrorProcedure
,ERROR_LINE() AS ErrorLine
,ERROR_MESSAGE() AS ErrorMessage;
END CATCH;