ArcGIS 10に基づく.0とOracle 10 gの空間データ管理プラットフォーム2(C#開発)
24884 ワード
//<![CDATA[
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-27062260-3']);
_gaq.push(['_setDomainName', 'none']);
_gaq.push(['_setAllowLinker', true]);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
//]]>
前の文章は全体のシステムのフレームワークと机能を简単に绍介して、このシステムの构造はC/Sで、データベースはOracle 10 gを采用して、空间のデータベースはArcGISはOracle 10 gのArcSDEに基づいて、开発のツールはVS 2008で、开発のプラットフォームはです.NET Framework3.5,コードのバージョン管理ツールはSVNです.
システム全体の実現を説明する時、私は私が開発した機能の順序に従って紹介して、実は多くの機能モジュールはすべて相対的に独立して、今日最も簡単な登録モジュールの実現から始めます.ログインモジュールは2つの場所で使用され、1つ目はもちろん1回目がメインインタフェースに入る前に、2回目がメタデータ管理サブシステムに入るときは対応する権限のあるアカウントでログインする必要があります.インタフェースの設計は詳しく紹介されていませんが、これは開発ツールを通じて直接ドラッグ&ドロップすることができ、いわゆる所見即得編集ができます.
最初のステップでは、ユーザー情報、主にユーザー名、パスワード、および対応する権限を保存するためのデータベースのテーブルを設計する必要があります.
第2歩はインタフェースを設計することで、ログインとキャンセルボタンが必要で、この2つのボタンの機能はシステムをログインして退出する機能です.さらに必要なのは、ユーザーがユーザー名とパスワードを入力したときにヒント情報が必要で、通常の方法はヒントダイアログボックスをポップアップすることですが、私はここではそうではありません.より良いユーザー体験のために、静的なテキストラベルボタンを使って、ユーザーが確認情報をクリックする必要はありません.
第3歩は登録ボタンの応答イベントコードを作成し、ユーザーがクリックしたときにこの機能を実行し、実現コードは以下の通りである.
上記のコードは、ユーザが入力したユーザ名とパスワードに基づいて、正しいかどうか、およびどの権限に属するユーザかを判断します.上のコードはSQLの1つのヘルプクラスを使って、主にいくつかのよく使うSQL操作をカプセル化して、このクラスの定義は以下の通りです(後でまたよくこのクラスを使って、基本的にすべてのSQL操作はすべてこのクラスが完成して、いくつかの特殊な操作を除いて、例えば取引、必ずパラメータを試験して長い文字列を挿入しなければなりません):
ステップ4では、システムを終了するなど、他の機能を実現します.コードは次のとおりです.
後で他のモジュールがログインしたユーザー情報を知るために、ユーザー名を返す関数を実現し、コード実装でもあります.以下のようにします.
ログインプロセス全体がすべて実現し、ログインに成功したらシステムの初期化を開始し、初期化が完了したらメインインタフェースに入ります.
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-27062260-3']);
_gaq.push(['_setDomainName', 'none']);
_gaq.push(['_setAllowLinker', true]);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
//]]>
前の文章は全体のシステムのフレームワークと机能を简単に绍介して、このシステムの构造はC/Sで、データベースはOracle 10 gを采用して、空间のデータベースはArcGISはOracle 10 gのArcSDEに基づいて、开発のツールはVS 2008で、开発のプラットフォームはです.NET Framework3.5,コードのバージョン管理ツールはSVNです.
システム全体の実現を説明する時、私は私が開発した機能の順序に従って紹介して、実は多くの機能モジュールはすべて相対的に独立して、今日最も簡単な登録モジュールの実現から始めます.ログインモジュールは2つの場所で使用され、1つ目はもちろん1回目がメインインタフェースに入る前に、2回目がメタデータ管理サブシステムに入るときは対応する権限のあるアカウントでログインする必要があります.インタフェースの設計は詳しく紹介されていませんが、これは開発ツールを通じて直接ドラッグ&ドロップすることができ、いわゆる所見即得編集ができます.
最初のステップでは、ユーザー情報、主にユーザー名、パスワード、および対応する権限を保存するためのデータベースのテーブルを設計する必要があります.
第2歩はインタフェースを設計することで、ログインとキャンセルボタンが必要で、この2つのボタンの機能はシステムをログインして退出する機能です.さらに必要なのは、ユーザーがユーザー名とパスワードを入力したときにヒント情報が必要で、通常の方法はヒントダイアログボックスをポップアップすることですが、私はここではそうではありません.より良いユーザー体験のために、静的なテキストラベルボタンを使って、ユーザーが確認情報をクリックする必要はありません.
第3歩は登録ボタンの応答イベントコードを作成し、ユーザーがクリックしたときにこの機能を実行し、実現コードは以下の通りである.
//
if (userNameTxt.Text.Trim() == "" || passwordTxt.Text.Trim() == "")
{
errlabel.Text = " !";
return;
}
SqlHelper sh = new SqlHelper();// Sql , SQL
string sql = string.Empty;
//
if (userType == 1)
{
sql = "select * from jcsjk_users where username='" + userNameTxt.Text + "'" +
" and password='" + passwordTxt.Text + "' and type='1'";
}
else if (userType == 2)
{
sql = "select * from jcsjk_users where username='" + userNameTxt.Text + "'" +
" and password='" + passwordTxt.Text + "' and type='2'";
}
if (sh.GetRecordCount(sql) > 0)
{
LogHelp.writeLog(userNameTxt.Text, " ", " ");
if (userType == 2)
{
FrmMain.metaIsLgoin = true;
FrmMain.metaUsername = userNameTxt.Text;
}
errlabel.Text = " , ...";
this.Update();
errlabel.Update();
while (!FrmMain.isInitFinish)
{
;
}
this.Close();
}
else
{
LogHelp.writeLog(userNameTxt.Text, " ", " ");
errlabel.Text = " ";
}
上記のコードは、ユーザが入力したユーザ名とパスワードに基づいて、正しいかどうか、およびどの権限に属するユーザかを判断します.上のコードはSQLの1つのヘルプクラスを使って、主にいくつかのよく使うSQL操作をカプセル化して、このクラスの定義は以下の通りです(後でまたよくこのクラスを使って、基本的にすべてのSQL操作はすべてこのクラスが完成して、いくつかの特殊な操作を除いて、例えば取引、必ずパラメータを試験して長い文字列を挿入しなければなりません):
public class SqlHelper
{
protected OracleConnection Connection;
private string connectionString;
public SqlHelper()
{
//connectionString = "Data Source=JCSJK;User Id=dzyj_jcsjk;Password=dzyj_jcsjk";
//connectionString = "Data Source=BRUCEWOO;User Id=sde;Password=wan861620";
connectionString = ConfigurationSettings.AppSettings["ConnectionString"];
Connection = new OracleConnection(connectionString);
}
/// <summary>
///
/// </summary>
/// <param name="ConnString"> </param>
public SqlHelper(string ConnString)
{
string connStr;
connStr = System.Configuration.ConfigurationSettings.AppSettings[ConnString].ToString();
Connection = new OracleConnection(connStr);
}
/// <summary>
///
/// </summary>
public void OpenConn()
{
if (this.Connection.State != ConnectionState.Open)
{
this.Connection.Open();
}
}
/// <summary>
///
/// </summary>
public void CloseConn()
{
if (Connection.State == ConnectionState.Open)
{
Connection.Close();
}
}
#region SQL , DataSet
/// <summary>
/// SQL , DataSet
/// </summary>
/// <param name="sql">sql </param>
/// <returns> DataSet</returns>
public DataSet ReturnDataSet(string sql, string tableName)
{
DataSet dataSet = new DataSet();
OpenConn();
OracleDataAdapter OraDA = new OracleDataAdapter(sql, Connection);
OraDA.Fill(dataSet, tableName);
return dataSet;
}
#endregion
#region Sql , dataset
/// <summary>
/// Sql , dataset
/// </summary>
/// <param name="sql">Sql </param>
/// <param name="PageSize"> </param>
/// <param name="CurrPageIndex">< /param>
/// <param name="DataSetName"> dataset </param>
/// <returns> DataSet</returns>
public DataSet ReturnDataSet(string sql,int PageSize,int CurrPageIndex,string DataSetName)
{
DataSet dataSet = new DataSet();
OpenConn();
OracleDataAdapter OraDA = new OracleDataAdapter(sql, Connection);
OraDA.Fill(dataSet, PageSize * (CurrPageIndex - 1), PageSize,DataSetName);
return dataSet;
}
#endregion
#region SQL , DataReader, .read() ,
/// <summary>
/// SQL , DataReader, .read() ,
/// </summary>
/// <param name="sql">sql </param>
/// <returns> OracleDataReader</returns>
public OracleDataReader ReturnDataReader(String sql)
{
OpenConn();
OracleCommand command = new OracleCommand(sql,Connection);
return command.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
}
#endregion
#region SQL ,
/// <summary>
/// SQL ,
/// </summary>
/// <param name="sql">sql </param>
/// <returns> </returns>
public int GetRecordCount(string sql)
{
int recordCount = 0;
OpenConn();
OracleCommand command = new OracleCommand(sql,Connection);
OracleDataReader dataReader = command.ExecuteReader();
while(dataReader.Read())
{
recordCount++;
}
dataReader.Close();
return recordCount;
}
#endregion
#region , seq.nextval seq.currval
/// <summary>
///
/// </summary>
/// <param name="seqstr"></param>
/// <returns></returns>
public decimal GetSeq(string seqstr)
{
decimal seqnum = 0;
string sql = "select " + seqstr + " from dual";
OpenConn();
OracleCommand command = new OracleCommand(sql,Connection);
OracleDataReader dataReader = command.ExecuteReader();
if(dataReader.Read())
{
seqnum = decimal.Parse(dataReader[0].ToString());
}
dataReader.Close();
// CloseConn();
return seqnum;
}
#endregion
#region SQL ,
/// <summary>
/// SQL ,
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public int ExecuteSQL(string sql)
{
int Cmd = 0;
OpenConn();
OracleCommand command = new OracleCommand(sql, Connection);
try
{
Cmd = command.ExecuteNonQuery();
}
catch (OracleException e)
{
CloseConn();
throw e;
}
return Cmd;
}
#endregion
// ===========================================
// == hashTable insert,update,del , "connstr"==
// ============================================
#region :Insert("test",ht)
/// <summary>
/// hashTable insert , "connstr"==
/// </summary>
/// <param name="TableName"> </param>
/// <param name="ht"> HashTable( , )</param>
/// <returns> </returns>
public int Insert(string TableName, Hashtable ht)
{
OracleParameter[] Parms = new OracleParameter[ht.Count];
IDictionaryEnumerator et = ht.GetEnumerator();
DataTable dt = GetTabType(TableName);
System.Data.OracleClient.OracleType otype;
int size = 0;
int i = 0;
//
while (et.MoveNext())
{
GetoType(et.Key.ToString().ToUpper(), dt, out otype, out size);
OracleParameter op = MakeParam(":"+et.Key.ToString(),otype,size,et.Value.ToString());
// SqlParameter
Parms[i] = op;
i = i+1;
}
string str_Sql = GetInsertSqlbyHt(TableName, ht); // sql
int val = ExecuteNonQuery(str_Sql, Parms);
return val;
}
#endregion
#region :Update("test","Id=:Id",ht);
public int Update(string TableName, string ht_Where, Hashtable ht)
{
OracleParameter[] Parms = new OracleParameter[ht.Count];
IDictionaryEnumerator et = ht.GetEnumerator();
DataTable dt = GetTabType(TableName);
OracleType otype;
int size = 0;
int i = 0;
//
while ( et.MoveNext() )
{
GetoType(et.Key.ToString().ToUpper(),dt,out otype,out size);
System.Data.OracleClient.OracleParameter op=MakeParam(":"+et.Key.ToString(),otype,size,et.Value.ToString());
Parms[i] = op; // SqlParameter
i = i + 1;
}
string str_Sql = GetUpdateSqlbyHt(TableName, ht_Where, ht); // sql
int val = ExecuteNonQuery(str_Sql, Parms);
return val;
}
#endregion
#region del , hash :Del("test","Id=:Id",ht)
/// <summary>
///
/// </summary>
/// <param name="TableName"> </param>
/// <param name="ht_Where"></param>
/// <param name="ht"></param>
/// <returns></returns>
public int Del(string TableName, string ht_Where, Hashtable ht)
{
OracleParameter[] Parms = new OracleParameter[ht.Count];
IDictionaryEnumerator et = ht.GetEnumerator();
DataTable dt = GetTabType(TableName);
OracleType otype;
int i = 0;
int size = 0;
//
while (et.MoveNext())
{
GetoType(et.Key.ToString().ToUpper(), dt, out otype, out size);
OracleParameter op = MakeParam(":"+et.Key.ToString(),et.Value.ToString());
// SqlParameter
Parms[i] = op;
i = i + 1;
}
// sql
string str_Sql = GetDelSqlbyHt(TableName, ht_Where, ht);
int val = ExecuteNonQuery(str_Sql,null);
return val;
}
#endregion
// ===========================================
// ======== ==================
// ===========================================
#region insert ( )
/// <summary>
/// insert
/// </summary>
/// <param name="TableName"> </param>
/// <param name="ht"> </param>
/// <returns> sql </returns>
public static string GetInsertSqlbyHt(string TableName, Hashtable ht)
{
string str_Sql = "";
int i = 0;
int ht_Count = ht.Count; //
IDictionaryEnumerator myEnumerator = ht.GetEnumerator();
string before = "";
string behide = "";
while ( myEnumerator.MoveNext() )
{
if (i==0)
{
before = "(" + myEnumerator.Key;
}
else if ( i+1 == ht_Count)
{
before = before+","+myEnumerator.Key+")";
}
else
{
before=before+","+myEnumerator.Key;
}
i = i+1;
}
behide = " Values"+before.Replace(",",",:").Replace("(","(:");
str_Sql = "Insert into " + TableName + before + behide;
return str_Sql;
}
#endregion
#region ,where , ( )
public static string GetUpdateSqlbyHt(string Table,string ht_Where,Hashtable ht)
{
string str_Sql = "";
int i = 0;
int ht_Count = ht.Count; //
IDictionaryEnumerator myEnumerator = ht.GetEnumerator();
while ( myEnumerator.MoveNext() )
{
if (i==0)
{
if (ht_Where.ToString().ToLower().IndexOf((myEnumerator.Key+"=:"+myEnumerator.Key).ToLower())==-1)
{
str_Sql=myEnumerator.Key+"=:"+myEnumerator.Key;
}
}
else
{
if (ht_Where.ToString().ToLower().IndexOf((":"+myEnumerator.Key+" ").ToLower())==-1)
{
str_Sql=str_Sql+","+myEnumerator.Key+"=:"+myEnumerator.Key;
}
}
i=i+1;
}
if (ht_Where==null || ht_Where.Replace(" ","") == "") //
{
str_Sql = "update "+Table+" set "+str_Sql;
}
else
{
str_Sql = "update "+ Table +" set " + str_Sql + " where " + ht_Where;
}
str_Sql = str_Sql.Replace("set ,","set ").Replace("update ,","update ");
return str_Sql;
}
#endregion
#region ,where , del ( )
public static string GetDelSqlbyHt(string Table, string ht_Where, Hashtable ht)
{
string str_Sql = "";
int i = 0;
int ht_Count = ht.Count; //
IDictionaryEnumerator myEnumerator = ht.GetEnumerator();
while ( myEnumerator.MoveNext() )
{
if (i==0)
{
if (ht_Where.ToString().ToLower().IndexOf((myEnumerator.Key+"=:"+myEnumerator.Key).ToLower())==-1)
{
str_Sql = myEnumerator.Key+"=:"+myEnumerator.Key;
}
}
else
{
if (ht_Where.ToString().ToLower().IndexOf((":"+myEnumerator.Key+" ").ToLower())==-1)
{
str_Sql = str_Sql+","+myEnumerator.Key+"=:"+myEnumerator.Key;
}
}
i = i + 1;
}
if (ht_Where == null || ht_Where.Replace(" ","") == "") //
{
str_Sql = "Delete "+Table;
}
else
{
str_Sql = "Delete "+Table+" where "+ht_Where;
}
return str_Sql;
}
#endregion
#region oracle
/// <summary>
/// oracle
/// </summary>
/// <param name="ParamName"> </param>
/// <param name="otype"> </param>
/// <param name="size"> </param>
/// <param name="Value"> </param>
/// <returns></returns>
public static OracleParameter MakeParam(string ParamName,System.Data.OracleClient.OracleType otype,int size,Object Value)
{
OracleParameter para = new OracleParameter(ParamName,Value);
para.OracleType = otype;
para.Size = size;
return para;
}
#endregion
#region oracle
public static OracleParameter MakeParam(string ParamName, string Value)
{
return new OracleParameter(ParamName, Value);
}
#endregion
#region oracle sql
public static void GetoType(string key, DataTable dt, out OracleType otype, out int size)
{
DataView dv = dt.DefaultView;
dv.RowFilter = "column_name='" + key + "'";
string fType = dv[0]["data_type"].ToString().ToUpper();
switch (fType)
{
case "DATE":
otype = OracleType.DateTime;
size = int.Parse(dv[0]["data_length"].ToString());
break;
case "CHAR":
otype= OracleType.Char;
size=int.Parse(dv[0]["data_length"].ToString());
break;
case "LONG":
otype= OracleType.Double;
size=int.Parse(dv[0]["data_length"].ToString());
break;
case "NVARCHAR2":
otype= OracleType.NVarChar;
size=int.Parse(dv[0]["data_length"].ToString());
break;
case "VARCHAR2":
otype= OracleType.NVarChar;
size=int.Parse(dv[0]["data_length"].ToString());
break;
default:
otype= OracleType.NVarChar;
size=100;
break;
}
}
#endregion
#region , connstr, !by/
public System.Data.DataTable GetTabType(string tabname)
{
string sql = "select column_name,data_type,data_length from all_tab_columns where table_name='"
+ tabname.ToUpper() + "'";
OpenConn();
return (ReturnDataSet(sql, "dv")).Tables[0];
}
#endregion
#region sql
public int ExecuteNonQuery(string cmdText, params OracleParameter[] cmdParms)
{
OracleCommand cmd = new OracleCommand();
OpenConn();
cmd.Connection = Connection;
cmd.CommandText = cmdText;
if (cmdParms != null)
{
foreach (OracleParameter parm in cmdParms)
{
cmd.Parameters.Add(parm);
}
}
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return val;
}
#endregion
/// <summary>
///
/// </summary>
/// <param name="strTableName"> </param>
/// <returns> </returns>
public string GetTableOwner(string strTableName)
{
string strTableOwner = string.Empty;
OpenConn();
string sql = "select owner from dba_tables where table_name='" + strTableName.ToUpper() + "'";
OracleCommand cmd = new OracleCommand(sql, Connection);
OracleDataReader odr = cmd.ExecuteReader();
if (odr.Read())
{
strTableOwner = odr[0].ToString();
}
odr.Close();
return strTableOwner;
}
}
ステップ4では、システムを終了するなど、他の機能を実現します.コードは次のとおりです.
Application.Exit();
後で他のモジュールがログインしたユーザー情報を知るために、ユーザー名を返す関数を実現し、コード実装でもあります.以下のようにします.
return userNameTxt.Text;
ログインプロセス全体がすべて実現し、ログインに成功したらシステムの初期化を開始し、初期化が完了したらメインインタフェースに入ります.