diff --git a/FrmDatabaseParaSettingOracle.cs b/FrmDatabaseParaSettingOracle.cs
index 18c5e99..6e97dfb 100644
--- a/FrmDatabaseParaSettingOracle.cs
+++ b/FrmDatabaseParaSettingOracle.cs
@@ -47,12 +47,15 @@
}
string serverIp = textBoxIP.Text.Trim();
+ /*
string hostName = System.Net.Dns.GetHostName();
if (serverIp == hostName || serverIp == "localhost"
|| serverIp == System.Net.Dns.GetHostAddresses(hostName).GetValue(2).ToString())
{
serverIp = "127.0.0.1";
}
+ * */
+
DateTime timeStart = DateTime.Now;
GSODataSource ds = globeControl1.Globe.DataManager.GetDataSourceByName(serverIp + "/" + textBoxDatabase.Text.Trim() + "_" + textBoxUser.Text.Trim());
if (ds == null)
@@ -83,7 +86,7 @@
connectParams.dataSourceName = ds.Name;
connectParams.databaseType = EnumDataSourceType.Oracle;
Utility.connectParamsOfDatabase.Add(connectParams);
-
+ setUtilityValue(connectParams);
WriteXML();
MessageBox.Show("连接Oracle数据库成功,用时:" + secondsConnectOracle.ToString() + "秒", "提示");
}
@@ -92,6 +95,14 @@
this.Close();
}
+ private void setUtilityValue(DatabaseConnectParams connectParams)
+ {
+ Utility.DBServer = connectParams.ip;
+ Utility.Database = connectParams.databaseName;
+ Utility.UserID = connectParams.userName;
+ Utility.DBPassword = connectParams.password;
+ }
+
private void ReadXML()
{
string strFileName = Path.GetDirectoryName(Application.ExecutablePath) + "/databaseConfigOracle.xml";
diff --git a/FrmDatabaseParaSettingOracle.cs b/FrmDatabaseParaSettingOracle.cs
index 18c5e99..6e97dfb 100644
--- a/FrmDatabaseParaSettingOracle.cs
+++ b/FrmDatabaseParaSettingOracle.cs
@@ -47,12 +47,15 @@
}
string serverIp = textBoxIP.Text.Trim();
+ /*
string hostName = System.Net.Dns.GetHostName();
if (serverIp == hostName || serverIp == "localhost"
|| serverIp == System.Net.Dns.GetHostAddresses(hostName).GetValue(2).ToString())
{
serverIp = "127.0.0.1";
}
+ * */
+
DateTime timeStart = DateTime.Now;
GSODataSource ds = globeControl1.Globe.DataManager.GetDataSourceByName(serverIp + "/" + textBoxDatabase.Text.Trim() + "_" + textBoxUser.Text.Trim());
if (ds == null)
@@ -83,7 +86,7 @@
connectParams.dataSourceName = ds.Name;
connectParams.databaseType = EnumDataSourceType.Oracle;
Utility.connectParamsOfDatabase.Add(connectParams);
-
+ setUtilityValue(connectParams);
WriteXML();
MessageBox.Show("连接Oracle数据库成功,用时:" + secondsConnectOracle.ToString() + "秒", "提示");
}
@@ -92,6 +95,14 @@
this.Close();
}
+ private void setUtilityValue(DatabaseConnectParams connectParams)
+ {
+ Utility.DBServer = connectParams.ip;
+ Utility.Database = connectParams.databaseName;
+ Utility.UserID = connectParams.userName;
+ Utility.DBPassword = connectParams.password;
+ }
+
private void ReadXML()
{
string strFileName = Path.GetDirectoryName(Application.ExecutablePath) + "/databaseConfigOracle.xml";
diff --git a/GXBuilder.cs b/GXBuilder.cs
new file mode 100644
index 0000000..b2ec9b2
--- /dev/null
+++ b/GXBuilder.cs
@@ -0,0 +1,187 @@
+using System;
+using System.Data;
+using System.Drawing;
+using System.Runtime.InteropServices;
+using GeoScene.Data;
+using GeoScene.Engine;
+using GeoScene.Globe;
+
+namespace WorldGIS
+{
+ public class GXBuilder : ModelBuilder
+ {
+ private static double diameter = 0.1;
+
+ public GXBuilder(GSODataSource ds)
+ : base(ds)
+ {
+
+ }
+
+ public override bool validate(GSOLayer layer)
+ {
+ return true;
+ }
+
+ ///
+ ///
+ ///
+ /// 追加或修改
+ /// 高程入库或埋深入库
+ ///
+ public override bool doBuild(EnumUpdateMode updateMode,
+ EnumBuildMode buildMode,
+ BaseParam param)
+ {
+ LineParam lineParam = param as LineParam;
+ GSOFeatureDataset newFeatureSet = ds.GetDatasetByName(lineParam.layerName) as GSOFeatureDataset;
+ if (newFeatureSet == null)
+ {
+ newFeatureSet = CreateDBFeatureDataset(layer, lineParam.layerName);
+ }
+ newFeatureSet.Open();
+ GSOFeatures features = layer.GetAllFeatures(true);
+ for (int i = 0; i < features.Length; i++)
+ {
+ GSOFeature f = features[i];
+ GSOGeoPolyline3D lineeee = f.Geometry as GSOGeoPolyline3D;
+ if (lineeee == null || lineeee.GetSpaceLength(true, 6378137) == 0)
+ {
+ LogHelper.Error("出现数据无法入库:" + f.ID);
+ continue;
+ }
+
+ GSOFeature newFeature = newFeatureSet.CreateFeature();
+
+ double radius = diameter; //创建光纤的半径
+ newFeature.Geometry = updateGemotry(f, lineParam, radius, buildMode);
+ newFeature.Geometry.Style = getPipeLineStyle(lineParam, f, radius);
+ newFeature.Name = f.GetFieldAsString(lineParam.uniqueIdFieldName);
+ setFeatureValueByShapeFeature(f, newFeature);
+ // newFeatureSet
+ if (newFeatureSet.GetFeatureByName(newFeature.Name, true).Length > 0)
+ {
+ if (!this.UpdateGXDevice(newFeatureSet.GetFeatureByName(newFeature.Name, true)[0],
+ newFeature))
+ {
+ LogHelper.Error("光纤设备更新失败:" + newFeature.Name+"\r\n");
+ }
+ continue;
+ }
+ newFeatureSet.AddFeature(newFeature);
+ if (!AddGXDevice(newFeature))
+ {
+ LogHelper.Error("光纤数据保存Alarm_Device失败:" + newFeature.Name+"\r\n");
+ }
+ }
+ newFeatureSet.Save();
+ newFeatureSet.Close();
+ return true;
+ }
+
+ private bool AddGXDevice(GSOFeature feature)
+ {
+ //保存数据到设备表
+ try
+ {
+ String deviceType = feature.GetValue("DEVICETYPE") == null
+ ? "" : feature.GetValue("DEVICETYPE").ToString();
+ String devCode = feature.GetValue("DEVICEID") == null
+ ? "" : feature.GetValue("DEVICEID").ToString();
+ String road = feature.GetValue("ROAD") == null
+ ? "" : feature.GetValue("ROAD").ToString();
+
+ //TODO LIST:
+ string sqlCount = "select dbid from alarm_device_type where" +
+ " typename = '" + deviceType + "'";
+ object dbid = OracleUtils.ExecuteScalar(OracleUtils.ConnectionString,
+ CommandType.Text, sqlCount);
+ if (dbid == null)
+ {
+ return false;
+ }
+ int deviceTypeId = int.Parse(dbid.ToString());
+ string sql = "Insert into alarm_device (DBID,ACTIVE,DEVCODE,DEVNAME,FACTORY," +
+ "INSTALLDATE,GAOCHENG,HEIGHT,LATITUDE,LONGTITUDE,DEVICETYPE_ID) " +
+ "values (SEQ_DEVICE_ID.NEXTVAL, 1, '" + devCode + "', '" + deviceType + devCode +
+ "', " + "'航天二院', " + "to_date('" + DateTime.Now.ToString() + "','yyyy/MM/dd hh24:mi::ss'), "
+ + "0, 0, 0, 0, " + deviceTypeId + ")";
+ OracleUtils.ExecuteNonQuery(OracleUtils.ConnectionString, CommandType.Text, sql);
+
+ }
+ catch (Exception e)
+ {
+ throw;
+ }
+ return true;
+ }
+
+ private bool UpdateGXDevice(GSOFeature feature, GSOFeature newFeature)
+ {
+ String deviceType = newFeature.GetValue("DEVICETYPE") == null
+ ? "" : newFeature.GetValue("DEVICETYPE").ToString();
+ String devCode = newFeature.GetValue("DEVICEID") == null
+ ? "" : newFeature.GetValue("DEVICEID").ToString();
+ String road = newFeature.GetValue("ROAD") == null
+ ? "" : newFeature.GetValue("ROAD").ToString();
+
+ feature.Geometry = newFeature.Geometry.Clone();
+ this.setFeatureValueByShapeFeature(newFeature,feature);
+ // feature.Dataset.Save();
+
+ string sqlCount = "select dbid from alarm_device_type where" +
+ " typename = '" + deviceType + "'";
+ object dbid = OracleUtils.ExecuteScalar(OracleUtils.ConnectionString,
+ CommandType.Text, sqlCount);
+ if (dbid == null)
+ {
+ return false;
+ }
+ int deviceTypeId = int.Parse(dbid.ToString());
+
+ string sql = "update alarm_device set FACTORY='" + road +
+ "', DEVICETYPE_ID='" + deviceTypeId +
+ "', DEVNAME='"+deviceType+devCode+"' "+
+ "where devcode='" + devCode + "'";
+ OracleUtils.ExecuteNonQuery(OracleUtils.ConnectionString, CommandType.Text, sql);
+ return true;
+ }
+
+ private GSOLineStyle3D getPipeLineStyle(LineParam lineParam, GSOFeature f, double radius)
+ {
+ GSOPipeLineStyle3D style0 = new GSOPipeLineStyle3D();
+ style0.LineColor = Color.FromArgb(lineParam.transparency, lineParam.lineColor);
+ style0.Slice = lineParam.sliceNum;
+ style0.CornerSliceAngle = lineParam.cornerSliceAngle;
+ style0.Radius = radius;
+ return style0;
+ }
+
+ private GSOGeometry updateGemotry(GSOFeature f, LineParam lineParam, double radius, EnumBuildMode buildMode)
+ {
+
+ f.Geometry.AltitudeMode = (buildMode.Equals(EnumBuildMode.Alititude)) ? EnumAltitudeMode.RelativeToGround : EnumAltitudeMode.Absolute;
+
+ GSOGeoPolyline3D line = f.Geometry as GSOGeoPolyline3D;
+ if (line == null)
+ {
+ return null; //log4net 记录错误处理
+ }
+
+ double deep1 = 0;
+ double deep2 = 0;
+
+ GSOPoint3ds pt3ds = new GSOPoint3ds();
+ for (int n = 0; n < line[0].Count; n++)
+ {
+ GSOPoint3d pt3d = line[0][n];
+ pt3d.Z = 0;
+
+ pt3ds.Add(pt3d);
+ }
+ line[0] = pt3ds;
+ return line;
+ }
+
+ }
+}
diff --git a/FrmDatabaseParaSettingOracle.cs b/FrmDatabaseParaSettingOracle.cs
index 18c5e99..6e97dfb 100644
--- a/FrmDatabaseParaSettingOracle.cs
+++ b/FrmDatabaseParaSettingOracle.cs
@@ -47,12 +47,15 @@
}
string serverIp = textBoxIP.Text.Trim();
+ /*
string hostName = System.Net.Dns.GetHostName();
if (serverIp == hostName || serverIp == "localhost"
|| serverIp == System.Net.Dns.GetHostAddresses(hostName).GetValue(2).ToString())
{
serverIp = "127.0.0.1";
}
+ * */
+
DateTime timeStart = DateTime.Now;
GSODataSource ds = globeControl1.Globe.DataManager.GetDataSourceByName(serverIp + "/" + textBoxDatabase.Text.Trim() + "_" + textBoxUser.Text.Trim());
if (ds == null)
@@ -83,7 +86,7 @@
connectParams.dataSourceName = ds.Name;
connectParams.databaseType = EnumDataSourceType.Oracle;
Utility.connectParamsOfDatabase.Add(connectParams);
-
+ setUtilityValue(connectParams);
WriteXML();
MessageBox.Show("连接Oracle数据库成功,用时:" + secondsConnectOracle.ToString() + "秒", "提示");
}
@@ -92,6 +95,14 @@
this.Close();
}
+ private void setUtilityValue(DatabaseConnectParams connectParams)
+ {
+ Utility.DBServer = connectParams.ip;
+ Utility.Database = connectParams.databaseName;
+ Utility.UserID = connectParams.userName;
+ Utility.DBPassword = connectParams.password;
+ }
+
private void ReadXML()
{
string strFileName = Path.GetDirectoryName(Application.ExecutablePath) + "/databaseConfigOracle.xml";
diff --git a/GXBuilder.cs b/GXBuilder.cs
new file mode 100644
index 0000000..b2ec9b2
--- /dev/null
+++ b/GXBuilder.cs
@@ -0,0 +1,187 @@
+using System;
+using System.Data;
+using System.Drawing;
+using System.Runtime.InteropServices;
+using GeoScene.Data;
+using GeoScene.Engine;
+using GeoScene.Globe;
+
+namespace WorldGIS
+{
+ public class GXBuilder : ModelBuilder
+ {
+ private static double diameter = 0.1;
+
+ public GXBuilder(GSODataSource ds)
+ : base(ds)
+ {
+
+ }
+
+ public override bool validate(GSOLayer layer)
+ {
+ return true;
+ }
+
+ ///
+ ///
+ ///
+ /// 追加或修改
+ /// 高程入库或埋深入库
+ ///
+ public override bool doBuild(EnumUpdateMode updateMode,
+ EnumBuildMode buildMode,
+ BaseParam param)
+ {
+ LineParam lineParam = param as LineParam;
+ GSOFeatureDataset newFeatureSet = ds.GetDatasetByName(lineParam.layerName) as GSOFeatureDataset;
+ if (newFeatureSet == null)
+ {
+ newFeatureSet = CreateDBFeatureDataset(layer, lineParam.layerName);
+ }
+ newFeatureSet.Open();
+ GSOFeatures features = layer.GetAllFeatures(true);
+ for (int i = 0; i < features.Length; i++)
+ {
+ GSOFeature f = features[i];
+ GSOGeoPolyline3D lineeee = f.Geometry as GSOGeoPolyline3D;
+ if (lineeee == null || lineeee.GetSpaceLength(true, 6378137) == 0)
+ {
+ LogHelper.Error("出现数据无法入库:" + f.ID);
+ continue;
+ }
+
+ GSOFeature newFeature = newFeatureSet.CreateFeature();
+
+ double radius = diameter; //创建光纤的半径
+ newFeature.Geometry = updateGemotry(f, lineParam, radius, buildMode);
+ newFeature.Geometry.Style = getPipeLineStyle(lineParam, f, radius);
+ newFeature.Name = f.GetFieldAsString(lineParam.uniqueIdFieldName);
+ setFeatureValueByShapeFeature(f, newFeature);
+ // newFeatureSet
+ if (newFeatureSet.GetFeatureByName(newFeature.Name, true).Length > 0)
+ {
+ if (!this.UpdateGXDevice(newFeatureSet.GetFeatureByName(newFeature.Name, true)[0],
+ newFeature))
+ {
+ LogHelper.Error("光纤设备更新失败:" + newFeature.Name+"\r\n");
+ }
+ continue;
+ }
+ newFeatureSet.AddFeature(newFeature);
+ if (!AddGXDevice(newFeature))
+ {
+ LogHelper.Error("光纤数据保存Alarm_Device失败:" + newFeature.Name+"\r\n");
+ }
+ }
+ newFeatureSet.Save();
+ newFeatureSet.Close();
+ return true;
+ }
+
+ private bool AddGXDevice(GSOFeature feature)
+ {
+ //保存数据到设备表
+ try
+ {
+ String deviceType = feature.GetValue("DEVICETYPE") == null
+ ? "" : feature.GetValue("DEVICETYPE").ToString();
+ String devCode = feature.GetValue("DEVICEID") == null
+ ? "" : feature.GetValue("DEVICEID").ToString();
+ String road = feature.GetValue("ROAD") == null
+ ? "" : feature.GetValue("ROAD").ToString();
+
+ //TODO LIST:
+ string sqlCount = "select dbid from alarm_device_type where" +
+ " typename = '" + deviceType + "'";
+ object dbid = OracleUtils.ExecuteScalar(OracleUtils.ConnectionString,
+ CommandType.Text, sqlCount);
+ if (dbid == null)
+ {
+ return false;
+ }
+ int deviceTypeId = int.Parse(dbid.ToString());
+ string sql = "Insert into alarm_device (DBID,ACTIVE,DEVCODE,DEVNAME,FACTORY," +
+ "INSTALLDATE,GAOCHENG,HEIGHT,LATITUDE,LONGTITUDE,DEVICETYPE_ID) " +
+ "values (SEQ_DEVICE_ID.NEXTVAL, 1, '" + devCode + "', '" + deviceType + devCode +
+ "', " + "'航天二院', " + "to_date('" + DateTime.Now.ToString() + "','yyyy/MM/dd hh24:mi::ss'), "
+ + "0, 0, 0, 0, " + deviceTypeId + ")";
+ OracleUtils.ExecuteNonQuery(OracleUtils.ConnectionString, CommandType.Text, sql);
+
+ }
+ catch (Exception e)
+ {
+ throw;
+ }
+ return true;
+ }
+
+ private bool UpdateGXDevice(GSOFeature feature, GSOFeature newFeature)
+ {
+ String deviceType = newFeature.GetValue("DEVICETYPE") == null
+ ? "" : newFeature.GetValue("DEVICETYPE").ToString();
+ String devCode = newFeature.GetValue("DEVICEID") == null
+ ? "" : newFeature.GetValue("DEVICEID").ToString();
+ String road = newFeature.GetValue("ROAD") == null
+ ? "" : newFeature.GetValue("ROAD").ToString();
+
+ feature.Geometry = newFeature.Geometry.Clone();
+ this.setFeatureValueByShapeFeature(newFeature,feature);
+ // feature.Dataset.Save();
+
+ string sqlCount = "select dbid from alarm_device_type where" +
+ " typename = '" + deviceType + "'";
+ object dbid = OracleUtils.ExecuteScalar(OracleUtils.ConnectionString,
+ CommandType.Text, sqlCount);
+ if (dbid == null)
+ {
+ return false;
+ }
+ int deviceTypeId = int.Parse(dbid.ToString());
+
+ string sql = "update alarm_device set FACTORY='" + road +
+ "', DEVICETYPE_ID='" + deviceTypeId +
+ "', DEVNAME='"+deviceType+devCode+"' "+
+ "where devcode='" + devCode + "'";
+ OracleUtils.ExecuteNonQuery(OracleUtils.ConnectionString, CommandType.Text, sql);
+ return true;
+ }
+
+ private GSOLineStyle3D getPipeLineStyle(LineParam lineParam, GSOFeature f, double radius)
+ {
+ GSOPipeLineStyle3D style0 = new GSOPipeLineStyle3D();
+ style0.LineColor = Color.FromArgb(lineParam.transparency, lineParam.lineColor);
+ style0.Slice = lineParam.sliceNum;
+ style0.CornerSliceAngle = lineParam.cornerSliceAngle;
+ style0.Radius = radius;
+ return style0;
+ }
+
+ private GSOGeometry updateGemotry(GSOFeature f, LineParam lineParam, double radius, EnumBuildMode buildMode)
+ {
+
+ f.Geometry.AltitudeMode = (buildMode.Equals(EnumBuildMode.Alititude)) ? EnumAltitudeMode.RelativeToGround : EnumAltitudeMode.Absolute;
+
+ GSOGeoPolyline3D line = f.Geometry as GSOGeoPolyline3D;
+ if (line == null)
+ {
+ return null; //log4net 记录错误处理
+ }
+
+ double deep1 = 0;
+ double deep2 = 0;
+
+ GSOPoint3ds pt3ds = new GSOPoint3ds();
+ for (int n = 0; n < line[0].Count; n++)
+ {
+ GSOPoint3d pt3d = line[0][n];
+ pt3d.Z = 0;
+
+ pt3ds.Add(pt3d);
+ }
+ line[0] = pt3ds;
+ return line;
+ }
+
+ }
+}
diff --git a/HTForms/FrmPipelineModelDataBase.cs b/HTForms/FrmPipelineModelDataBase.cs
index 84a2d7b..3076bdd 100644
--- a/HTForms/FrmPipelineModelDataBase.cs
+++ b/HTForms/FrmPipelineModelDataBase.cs
@@ -91,6 +91,7 @@
}
else
datasource = ds;
+
if (comboBoxExLayer.Text.Trim() == "")
{
MessageBox.Show("请选择一个图层文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
@@ -126,20 +127,12 @@
comboBoxExLayer.Text));
if (layer == null) return;
- FieldValidate fieldValidate = FieldValidateFactory.Create(ValidateConfig.LoadConfig(),
- getEnumValidateType());
-
- if (!fieldValidate.Validate(layer))
+ if (txtModelLayer.Text != "传感设备图层")
{
- DateTime dt=DateTime.Now;
- string logFilePath = Application.StartupPath + "\\log\\" + dt.Year + "\\" + dt.Year + dt.Month + "\\" + dt.Year +
- dt.Month + dt.Day + ".txt";
- MessageBox.Show("选择的数据不符合数据规范,详情见日志" + logFilePath, "提示");
- return;
+ if (!getValidateResult(layer))
+ return;
}
- ModelBuilder lineBuilder = new LineBuilder(datasource);
-
LineParam lineParam = new LineParam();
lineParam.layerName = txtModelLayer.Text;
lineParam.uniqueIdFieldName = cmbID.Text;
@@ -149,14 +142,17 @@
lineParam.diameterFieldName = cmbRadius.Text;
lineParam.relativeMode = (cmbReference.Text == "管顶") ? 0 : 1;
lineParam.lineColor = btnPipelineColor.BackColor;
- lineParam.transparency=Convert.ToByte(ComboboxRansparency.Value);
+ lineParam.transparency = Convert.ToByte(ComboboxRansparency.Value);
lineParam.cornerSliceAngle = Convert.ToDouble(textBoxCornerSliceAngle.Text);
- lineParam.sliceNum=Convert.ToInt32(txtSlice.Text);
+ lineParam.sliceNum = Convert.ToInt32(txtSlice.Text);
lineParam.channelWidth = comboBoxExWidth.Text;
lineParam.channelHeight = comboBoxExHeight.Text;
- lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update,
- checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam);
+ if (txtModelLayer.Text != "传感设备图层")
+ lineBuilder(layer, lineParam);
+ else
+ gxLineBuilder(layer, lineParam);
+
addLayerToGlobeControl(lineParam.layerName);
//this.DialogResult = DialogResult.OK;
MessageBox.Show("入库完成!", "提示");
@@ -167,6 +163,33 @@
}
}
+ bool getValidateResult(GSOLayer layer)
+ {
+ FieldValidate fieldValidate = FieldValidateFactory.Create(ValidateConfig.LoadConfig(),
+ getEnumValidateType());
+
+ if (fieldValidate.Validate(layer)) return true;
+ DateTime dt = DateTime.Now;
+ string logFilePath = Application.StartupPath + "\\log\\" + dt.Year + "\\" + dt.Year + dt.Month +
+ "\\" + dt.Year + dt.Month + dt.Day + ".txt";
+ MessageBox.Show("选择的数据不符合数据规范,详情见日志" + logFilePath, "提示");
+ return false;
+ }
+
+ void lineBuilder(GSOLayer layer,LineParam lineParam)
+ {
+ ModelBuilder lineBuilder = new LineBuilder(datasource);
+ lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update,
+ checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam);
+ }
+
+ void gxLineBuilder(GSOLayer layer, LineParam lineParam)
+ {
+ ModelBuilder lineBuilder = new GXBuilder(datasource);
+ lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update,
+ checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam);
+ }
+
private EnumValidateType getEnumValidateType()
{
if (comboBoxExWidth.Text != "")
diff --git a/FrmDatabaseParaSettingOracle.cs b/FrmDatabaseParaSettingOracle.cs
index 18c5e99..6e97dfb 100644
--- a/FrmDatabaseParaSettingOracle.cs
+++ b/FrmDatabaseParaSettingOracle.cs
@@ -47,12 +47,15 @@
}
string serverIp = textBoxIP.Text.Trim();
+ /*
string hostName = System.Net.Dns.GetHostName();
if (serverIp == hostName || serverIp == "localhost"
|| serverIp == System.Net.Dns.GetHostAddresses(hostName).GetValue(2).ToString())
{
serverIp = "127.0.0.1";
}
+ * */
+
DateTime timeStart = DateTime.Now;
GSODataSource ds = globeControl1.Globe.DataManager.GetDataSourceByName(serverIp + "/" + textBoxDatabase.Text.Trim() + "_" + textBoxUser.Text.Trim());
if (ds == null)
@@ -83,7 +86,7 @@
connectParams.dataSourceName = ds.Name;
connectParams.databaseType = EnumDataSourceType.Oracle;
Utility.connectParamsOfDatabase.Add(connectParams);
-
+ setUtilityValue(connectParams);
WriteXML();
MessageBox.Show("连接Oracle数据库成功,用时:" + secondsConnectOracle.ToString() + "秒", "提示");
}
@@ -92,6 +95,14 @@
this.Close();
}
+ private void setUtilityValue(DatabaseConnectParams connectParams)
+ {
+ Utility.DBServer = connectParams.ip;
+ Utility.Database = connectParams.databaseName;
+ Utility.UserID = connectParams.userName;
+ Utility.DBPassword = connectParams.password;
+ }
+
private void ReadXML()
{
string strFileName = Path.GetDirectoryName(Application.ExecutablePath) + "/databaseConfigOracle.xml";
diff --git a/GXBuilder.cs b/GXBuilder.cs
new file mode 100644
index 0000000..b2ec9b2
--- /dev/null
+++ b/GXBuilder.cs
@@ -0,0 +1,187 @@
+using System;
+using System.Data;
+using System.Drawing;
+using System.Runtime.InteropServices;
+using GeoScene.Data;
+using GeoScene.Engine;
+using GeoScene.Globe;
+
+namespace WorldGIS
+{
+ public class GXBuilder : ModelBuilder
+ {
+ private static double diameter = 0.1;
+
+ public GXBuilder(GSODataSource ds)
+ : base(ds)
+ {
+
+ }
+
+ public override bool validate(GSOLayer layer)
+ {
+ return true;
+ }
+
+ ///
+ ///
+ ///
+ /// 追加或修改
+ /// 高程入库或埋深入库
+ ///
+ public override bool doBuild(EnumUpdateMode updateMode,
+ EnumBuildMode buildMode,
+ BaseParam param)
+ {
+ LineParam lineParam = param as LineParam;
+ GSOFeatureDataset newFeatureSet = ds.GetDatasetByName(lineParam.layerName) as GSOFeatureDataset;
+ if (newFeatureSet == null)
+ {
+ newFeatureSet = CreateDBFeatureDataset(layer, lineParam.layerName);
+ }
+ newFeatureSet.Open();
+ GSOFeatures features = layer.GetAllFeatures(true);
+ for (int i = 0; i < features.Length; i++)
+ {
+ GSOFeature f = features[i];
+ GSOGeoPolyline3D lineeee = f.Geometry as GSOGeoPolyline3D;
+ if (lineeee == null || lineeee.GetSpaceLength(true, 6378137) == 0)
+ {
+ LogHelper.Error("出现数据无法入库:" + f.ID);
+ continue;
+ }
+
+ GSOFeature newFeature = newFeatureSet.CreateFeature();
+
+ double radius = diameter; //创建光纤的半径
+ newFeature.Geometry = updateGemotry(f, lineParam, radius, buildMode);
+ newFeature.Geometry.Style = getPipeLineStyle(lineParam, f, radius);
+ newFeature.Name = f.GetFieldAsString(lineParam.uniqueIdFieldName);
+ setFeatureValueByShapeFeature(f, newFeature);
+ // newFeatureSet
+ if (newFeatureSet.GetFeatureByName(newFeature.Name, true).Length > 0)
+ {
+ if (!this.UpdateGXDevice(newFeatureSet.GetFeatureByName(newFeature.Name, true)[0],
+ newFeature))
+ {
+ LogHelper.Error("光纤设备更新失败:" + newFeature.Name+"\r\n");
+ }
+ continue;
+ }
+ newFeatureSet.AddFeature(newFeature);
+ if (!AddGXDevice(newFeature))
+ {
+ LogHelper.Error("光纤数据保存Alarm_Device失败:" + newFeature.Name+"\r\n");
+ }
+ }
+ newFeatureSet.Save();
+ newFeatureSet.Close();
+ return true;
+ }
+
+ private bool AddGXDevice(GSOFeature feature)
+ {
+ //保存数据到设备表
+ try
+ {
+ String deviceType = feature.GetValue("DEVICETYPE") == null
+ ? "" : feature.GetValue("DEVICETYPE").ToString();
+ String devCode = feature.GetValue("DEVICEID") == null
+ ? "" : feature.GetValue("DEVICEID").ToString();
+ String road = feature.GetValue("ROAD") == null
+ ? "" : feature.GetValue("ROAD").ToString();
+
+ //TODO LIST:
+ string sqlCount = "select dbid from alarm_device_type where" +
+ " typename = '" + deviceType + "'";
+ object dbid = OracleUtils.ExecuteScalar(OracleUtils.ConnectionString,
+ CommandType.Text, sqlCount);
+ if (dbid == null)
+ {
+ return false;
+ }
+ int deviceTypeId = int.Parse(dbid.ToString());
+ string sql = "Insert into alarm_device (DBID,ACTIVE,DEVCODE,DEVNAME,FACTORY," +
+ "INSTALLDATE,GAOCHENG,HEIGHT,LATITUDE,LONGTITUDE,DEVICETYPE_ID) " +
+ "values (SEQ_DEVICE_ID.NEXTVAL, 1, '" + devCode + "', '" + deviceType + devCode +
+ "', " + "'航天二院', " + "to_date('" + DateTime.Now.ToString() + "','yyyy/MM/dd hh24:mi::ss'), "
+ + "0, 0, 0, 0, " + deviceTypeId + ")";
+ OracleUtils.ExecuteNonQuery(OracleUtils.ConnectionString, CommandType.Text, sql);
+
+ }
+ catch (Exception e)
+ {
+ throw;
+ }
+ return true;
+ }
+
+ private bool UpdateGXDevice(GSOFeature feature, GSOFeature newFeature)
+ {
+ String deviceType = newFeature.GetValue("DEVICETYPE") == null
+ ? "" : newFeature.GetValue("DEVICETYPE").ToString();
+ String devCode = newFeature.GetValue("DEVICEID") == null
+ ? "" : newFeature.GetValue("DEVICEID").ToString();
+ String road = newFeature.GetValue("ROAD") == null
+ ? "" : newFeature.GetValue("ROAD").ToString();
+
+ feature.Geometry = newFeature.Geometry.Clone();
+ this.setFeatureValueByShapeFeature(newFeature,feature);
+ // feature.Dataset.Save();
+
+ string sqlCount = "select dbid from alarm_device_type where" +
+ " typename = '" + deviceType + "'";
+ object dbid = OracleUtils.ExecuteScalar(OracleUtils.ConnectionString,
+ CommandType.Text, sqlCount);
+ if (dbid == null)
+ {
+ return false;
+ }
+ int deviceTypeId = int.Parse(dbid.ToString());
+
+ string sql = "update alarm_device set FACTORY='" + road +
+ "', DEVICETYPE_ID='" + deviceTypeId +
+ "', DEVNAME='"+deviceType+devCode+"' "+
+ "where devcode='" + devCode + "'";
+ OracleUtils.ExecuteNonQuery(OracleUtils.ConnectionString, CommandType.Text, sql);
+ return true;
+ }
+
+ private GSOLineStyle3D getPipeLineStyle(LineParam lineParam, GSOFeature f, double radius)
+ {
+ GSOPipeLineStyle3D style0 = new GSOPipeLineStyle3D();
+ style0.LineColor = Color.FromArgb(lineParam.transparency, lineParam.lineColor);
+ style0.Slice = lineParam.sliceNum;
+ style0.CornerSliceAngle = lineParam.cornerSliceAngle;
+ style0.Radius = radius;
+ return style0;
+ }
+
+ private GSOGeometry updateGemotry(GSOFeature f, LineParam lineParam, double radius, EnumBuildMode buildMode)
+ {
+
+ f.Geometry.AltitudeMode = (buildMode.Equals(EnumBuildMode.Alititude)) ? EnumAltitudeMode.RelativeToGround : EnumAltitudeMode.Absolute;
+
+ GSOGeoPolyline3D line = f.Geometry as GSOGeoPolyline3D;
+ if (line == null)
+ {
+ return null; //log4net 记录错误处理
+ }
+
+ double deep1 = 0;
+ double deep2 = 0;
+
+ GSOPoint3ds pt3ds = new GSOPoint3ds();
+ for (int n = 0; n < line[0].Count; n++)
+ {
+ GSOPoint3d pt3d = line[0][n];
+ pt3d.Z = 0;
+
+ pt3ds.Add(pt3d);
+ }
+ line[0] = pt3ds;
+ return line;
+ }
+
+ }
+}
diff --git a/HTForms/FrmPipelineModelDataBase.cs b/HTForms/FrmPipelineModelDataBase.cs
index 84a2d7b..3076bdd 100644
--- a/HTForms/FrmPipelineModelDataBase.cs
+++ b/HTForms/FrmPipelineModelDataBase.cs
@@ -91,6 +91,7 @@
}
else
datasource = ds;
+
if (comboBoxExLayer.Text.Trim() == "")
{
MessageBox.Show("请选择一个图层文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
@@ -126,20 +127,12 @@
comboBoxExLayer.Text));
if (layer == null) return;
- FieldValidate fieldValidate = FieldValidateFactory.Create(ValidateConfig.LoadConfig(),
- getEnumValidateType());
-
- if (!fieldValidate.Validate(layer))
+ if (txtModelLayer.Text != "传感设备图层")
{
- DateTime dt=DateTime.Now;
- string logFilePath = Application.StartupPath + "\\log\\" + dt.Year + "\\" + dt.Year + dt.Month + "\\" + dt.Year +
- dt.Month + dt.Day + ".txt";
- MessageBox.Show("选择的数据不符合数据规范,详情见日志" + logFilePath, "提示");
- return;
+ if (!getValidateResult(layer))
+ return;
}
- ModelBuilder lineBuilder = new LineBuilder(datasource);
-
LineParam lineParam = new LineParam();
lineParam.layerName = txtModelLayer.Text;
lineParam.uniqueIdFieldName = cmbID.Text;
@@ -149,14 +142,17 @@
lineParam.diameterFieldName = cmbRadius.Text;
lineParam.relativeMode = (cmbReference.Text == "管顶") ? 0 : 1;
lineParam.lineColor = btnPipelineColor.BackColor;
- lineParam.transparency=Convert.ToByte(ComboboxRansparency.Value);
+ lineParam.transparency = Convert.ToByte(ComboboxRansparency.Value);
lineParam.cornerSliceAngle = Convert.ToDouble(textBoxCornerSliceAngle.Text);
- lineParam.sliceNum=Convert.ToInt32(txtSlice.Text);
+ lineParam.sliceNum = Convert.ToInt32(txtSlice.Text);
lineParam.channelWidth = comboBoxExWidth.Text;
lineParam.channelHeight = comboBoxExHeight.Text;
- lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update,
- checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam);
+ if (txtModelLayer.Text != "传感设备图层")
+ lineBuilder(layer, lineParam);
+ else
+ gxLineBuilder(layer, lineParam);
+
addLayerToGlobeControl(lineParam.layerName);
//this.DialogResult = DialogResult.OK;
MessageBox.Show("入库完成!", "提示");
@@ -167,6 +163,33 @@
}
}
+ bool getValidateResult(GSOLayer layer)
+ {
+ FieldValidate fieldValidate = FieldValidateFactory.Create(ValidateConfig.LoadConfig(),
+ getEnumValidateType());
+
+ if (fieldValidate.Validate(layer)) return true;
+ DateTime dt = DateTime.Now;
+ string logFilePath = Application.StartupPath + "\\log\\" + dt.Year + "\\" + dt.Year + dt.Month +
+ "\\" + dt.Year + dt.Month + dt.Day + ".txt";
+ MessageBox.Show("选择的数据不符合数据规范,详情见日志" + logFilePath, "提示");
+ return false;
+ }
+
+ void lineBuilder(GSOLayer layer,LineParam lineParam)
+ {
+ ModelBuilder lineBuilder = new LineBuilder(datasource);
+ lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update,
+ checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam);
+ }
+
+ void gxLineBuilder(GSOLayer layer, LineParam lineParam)
+ {
+ ModelBuilder lineBuilder = new GXBuilder(datasource);
+ lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update,
+ checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam);
+ }
+
private EnumValidateType getEnumValidateType()
{
if (comboBoxExWidth.Text != "")
diff --git a/LSPipeline.csproj b/LSPipeline.csproj
index 477d8ba..599b492 100644
--- a/LSPipeline.csproj
+++ b/LSPipeline.csproj
@@ -222,6 +222,7 @@
FrmUpdateLayerFieldValues.cs
+
Form
@@ -243,6 +244,7 @@
+
True
diff --git a/FrmDatabaseParaSettingOracle.cs b/FrmDatabaseParaSettingOracle.cs
index 18c5e99..6e97dfb 100644
--- a/FrmDatabaseParaSettingOracle.cs
+++ b/FrmDatabaseParaSettingOracle.cs
@@ -47,12 +47,15 @@
}
string serverIp = textBoxIP.Text.Trim();
+ /*
string hostName = System.Net.Dns.GetHostName();
if (serverIp == hostName || serverIp == "localhost"
|| serverIp == System.Net.Dns.GetHostAddresses(hostName).GetValue(2).ToString())
{
serverIp = "127.0.0.1";
}
+ * */
+
DateTime timeStart = DateTime.Now;
GSODataSource ds = globeControl1.Globe.DataManager.GetDataSourceByName(serverIp + "/" + textBoxDatabase.Text.Trim() + "_" + textBoxUser.Text.Trim());
if (ds == null)
@@ -83,7 +86,7 @@
connectParams.dataSourceName = ds.Name;
connectParams.databaseType = EnumDataSourceType.Oracle;
Utility.connectParamsOfDatabase.Add(connectParams);
-
+ setUtilityValue(connectParams);
WriteXML();
MessageBox.Show("连接Oracle数据库成功,用时:" + secondsConnectOracle.ToString() + "秒", "提示");
}
@@ -92,6 +95,14 @@
this.Close();
}
+ private void setUtilityValue(DatabaseConnectParams connectParams)
+ {
+ Utility.DBServer = connectParams.ip;
+ Utility.Database = connectParams.databaseName;
+ Utility.UserID = connectParams.userName;
+ Utility.DBPassword = connectParams.password;
+ }
+
private void ReadXML()
{
string strFileName = Path.GetDirectoryName(Application.ExecutablePath) + "/databaseConfigOracle.xml";
diff --git a/GXBuilder.cs b/GXBuilder.cs
new file mode 100644
index 0000000..b2ec9b2
--- /dev/null
+++ b/GXBuilder.cs
@@ -0,0 +1,187 @@
+using System;
+using System.Data;
+using System.Drawing;
+using System.Runtime.InteropServices;
+using GeoScene.Data;
+using GeoScene.Engine;
+using GeoScene.Globe;
+
+namespace WorldGIS
+{
+ public class GXBuilder : ModelBuilder
+ {
+ private static double diameter = 0.1;
+
+ public GXBuilder(GSODataSource ds)
+ : base(ds)
+ {
+
+ }
+
+ public override bool validate(GSOLayer layer)
+ {
+ return true;
+ }
+
+ ///
+ ///
+ ///
+ /// 追加或修改
+ /// 高程入库或埋深入库
+ ///
+ public override bool doBuild(EnumUpdateMode updateMode,
+ EnumBuildMode buildMode,
+ BaseParam param)
+ {
+ LineParam lineParam = param as LineParam;
+ GSOFeatureDataset newFeatureSet = ds.GetDatasetByName(lineParam.layerName) as GSOFeatureDataset;
+ if (newFeatureSet == null)
+ {
+ newFeatureSet = CreateDBFeatureDataset(layer, lineParam.layerName);
+ }
+ newFeatureSet.Open();
+ GSOFeatures features = layer.GetAllFeatures(true);
+ for (int i = 0; i < features.Length; i++)
+ {
+ GSOFeature f = features[i];
+ GSOGeoPolyline3D lineeee = f.Geometry as GSOGeoPolyline3D;
+ if (lineeee == null || lineeee.GetSpaceLength(true, 6378137) == 0)
+ {
+ LogHelper.Error("出现数据无法入库:" + f.ID);
+ continue;
+ }
+
+ GSOFeature newFeature = newFeatureSet.CreateFeature();
+
+ double radius = diameter; //创建光纤的半径
+ newFeature.Geometry = updateGemotry(f, lineParam, radius, buildMode);
+ newFeature.Geometry.Style = getPipeLineStyle(lineParam, f, radius);
+ newFeature.Name = f.GetFieldAsString(lineParam.uniqueIdFieldName);
+ setFeatureValueByShapeFeature(f, newFeature);
+ // newFeatureSet
+ if (newFeatureSet.GetFeatureByName(newFeature.Name, true).Length > 0)
+ {
+ if (!this.UpdateGXDevice(newFeatureSet.GetFeatureByName(newFeature.Name, true)[0],
+ newFeature))
+ {
+ LogHelper.Error("光纤设备更新失败:" + newFeature.Name+"\r\n");
+ }
+ continue;
+ }
+ newFeatureSet.AddFeature(newFeature);
+ if (!AddGXDevice(newFeature))
+ {
+ LogHelper.Error("光纤数据保存Alarm_Device失败:" + newFeature.Name+"\r\n");
+ }
+ }
+ newFeatureSet.Save();
+ newFeatureSet.Close();
+ return true;
+ }
+
+ private bool AddGXDevice(GSOFeature feature)
+ {
+ //保存数据到设备表
+ try
+ {
+ String deviceType = feature.GetValue("DEVICETYPE") == null
+ ? "" : feature.GetValue("DEVICETYPE").ToString();
+ String devCode = feature.GetValue("DEVICEID") == null
+ ? "" : feature.GetValue("DEVICEID").ToString();
+ String road = feature.GetValue("ROAD") == null
+ ? "" : feature.GetValue("ROAD").ToString();
+
+ //TODO LIST:
+ string sqlCount = "select dbid from alarm_device_type where" +
+ " typename = '" + deviceType + "'";
+ object dbid = OracleUtils.ExecuteScalar(OracleUtils.ConnectionString,
+ CommandType.Text, sqlCount);
+ if (dbid == null)
+ {
+ return false;
+ }
+ int deviceTypeId = int.Parse(dbid.ToString());
+ string sql = "Insert into alarm_device (DBID,ACTIVE,DEVCODE,DEVNAME,FACTORY," +
+ "INSTALLDATE,GAOCHENG,HEIGHT,LATITUDE,LONGTITUDE,DEVICETYPE_ID) " +
+ "values (SEQ_DEVICE_ID.NEXTVAL, 1, '" + devCode + "', '" + deviceType + devCode +
+ "', " + "'航天二院', " + "to_date('" + DateTime.Now.ToString() + "','yyyy/MM/dd hh24:mi::ss'), "
+ + "0, 0, 0, 0, " + deviceTypeId + ")";
+ OracleUtils.ExecuteNonQuery(OracleUtils.ConnectionString, CommandType.Text, sql);
+
+ }
+ catch (Exception e)
+ {
+ throw;
+ }
+ return true;
+ }
+
+ private bool UpdateGXDevice(GSOFeature feature, GSOFeature newFeature)
+ {
+ String deviceType = newFeature.GetValue("DEVICETYPE") == null
+ ? "" : newFeature.GetValue("DEVICETYPE").ToString();
+ String devCode = newFeature.GetValue("DEVICEID") == null
+ ? "" : newFeature.GetValue("DEVICEID").ToString();
+ String road = newFeature.GetValue("ROAD") == null
+ ? "" : newFeature.GetValue("ROAD").ToString();
+
+ feature.Geometry = newFeature.Geometry.Clone();
+ this.setFeatureValueByShapeFeature(newFeature,feature);
+ // feature.Dataset.Save();
+
+ string sqlCount = "select dbid from alarm_device_type where" +
+ " typename = '" + deviceType + "'";
+ object dbid = OracleUtils.ExecuteScalar(OracleUtils.ConnectionString,
+ CommandType.Text, sqlCount);
+ if (dbid == null)
+ {
+ return false;
+ }
+ int deviceTypeId = int.Parse(dbid.ToString());
+
+ string sql = "update alarm_device set FACTORY='" + road +
+ "', DEVICETYPE_ID='" + deviceTypeId +
+ "', DEVNAME='"+deviceType+devCode+"' "+
+ "where devcode='" + devCode + "'";
+ OracleUtils.ExecuteNonQuery(OracleUtils.ConnectionString, CommandType.Text, sql);
+ return true;
+ }
+
+ private GSOLineStyle3D getPipeLineStyle(LineParam lineParam, GSOFeature f, double radius)
+ {
+ GSOPipeLineStyle3D style0 = new GSOPipeLineStyle3D();
+ style0.LineColor = Color.FromArgb(lineParam.transparency, lineParam.lineColor);
+ style0.Slice = lineParam.sliceNum;
+ style0.CornerSliceAngle = lineParam.cornerSliceAngle;
+ style0.Radius = radius;
+ return style0;
+ }
+
+ private GSOGeometry updateGemotry(GSOFeature f, LineParam lineParam, double radius, EnumBuildMode buildMode)
+ {
+
+ f.Geometry.AltitudeMode = (buildMode.Equals(EnumBuildMode.Alititude)) ? EnumAltitudeMode.RelativeToGround : EnumAltitudeMode.Absolute;
+
+ GSOGeoPolyline3D line = f.Geometry as GSOGeoPolyline3D;
+ if (line == null)
+ {
+ return null; //log4net 记录错误处理
+ }
+
+ double deep1 = 0;
+ double deep2 = 0;
+
+ GSOPoint3ds pt3ds = new GSOPoint3ds();
+ for (int n = 0; n < line[0].Count; n++)
+ {
+ GSOPoint3d pt3d = line[0][n];
+ pt3d.Z = 0;
+
+ pt3ds.Add(pt3d);
+ }
+ line[0] = pt3ds;
+ return line;
+ }
+
+ }
+}
diff --git a/HTForms/FrmPipelineModelDataBase.cs b/HTForms/FrmPipelineModelDataBase.cs
index 84a2d7b..3076bdd 100644
--- a/HTForms/FrmPipelineModelDataBase.cs
+++ b/HTForms/FrmPipelineModelDataBase.cs
@@ -91,6 +91,7 @@
}
else
datasource = ds;
+
if (comboBoxExLayer.Text.Trim() == "")
{
MessageBox.Show("请选择一个图层文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
@@ -126,20 +127,12 @@
comboBoxExLayer.Text));
if (layer == null) return;
- FieldValidate fieldValidate = FieldValidateFactory.Create(ValidateConfig.LoadConfig(),
- getEnumValidateType());
-
- if (!fieldValidate.Validate(layer))
+ if (txtModelLayer.Text != "传感设备图层")
{
- DateTime dt=DateTime.Now;
- string logFilePath = Application.StartupPath + "\\log\\" + dt.Year + "\\" + dt.Year + dt.Month + "\\" + dt.Year +
- dt.Month + dt.Day + ".txt";
- MessageBox.Show("选择的数据不符合数据规范,详情见日志" + logFilePath, "提示");
- return;
+ if (!getValidateResult(layer))
+ return;
}
- ModelBuilder lineBuilder = new LineBuilder(datasource);
-
LineParam lineParam = new LineParam();
lineParam.layerName = txtModelLayer.Text;
lineParam.uniqueIdFieldName = cmbID.Text;
@@ -149,14 +142,17 @@
lineParam.diameterFieldName = cmbRadius.Text;
lineParam.relativeMode = (cmbReference.Text == "管顶") ? 0 : 1;
lineParam.lineColor = btnPipelineColor.BackColor;
- lineParam.transparency=Convert.ToByte(ComboboxRansparency.Value);
+ lineParam.transparency = Convert.ToByte(ComboboxRansparency.Value);
lineParam.cornerSliceAngle = Convert.ToDouble(textBoxCornerSliceAngle.Text);
- lineParam.sliceNum=Convert.ToInt32(txtSlice.Text);
+ lineParam.sliceNum = Convert.ToInt32(txtSlice.Text);
lineParam.channelWidth = comboBoxExWidth.Text;
lineParam.channelHeight = comboBoxExHeight.Text;
- lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update,
- checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam);
+ if (txtModelLayer.Text != "传感设备图层")
+ lineBuilder(layer, lineParam);
+ else
+ gxLineBuilder(layer, lineParam);
+
addLayerToGlobeControl(lineParam.layerName);
//this.DialogResult = DialogResult.OK;
MessageBox.Show("入库完成!", "提示");
@@ -167,6 +163,33 @@
}
}
+ bool getValidateResult(GSOLayer layer)
+ {
+ FieldValidate fieldValidate = FieldValidateFactory.Create(ValidateConfig.LoadConfig(),
+ getEnumValidateType());
+
+ if (fieldValidate.Validate(layer)) return true;
+ DateTime dt = DateTime.Now;
+ string logFilePath = Application.StartupPath + "\\log\\" + dt.Year + "\\" + dt.Year + dt.Month +
+ "\\" + dt.Year + dt.Month + dt.Day + ".txt";
+ MessageBox.Show("选择的数据不符合数据规范,详情见日志" + logFilePath, "提示");
+ return false;
+ }
+
+ void lineBuilder(GSOLayer layer,LineParam lineParam)
+ {
+ ModelBuilder lineBuilder = new LineBuilder(datasource);
+ lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update,
+ checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam);
+ }
+
+ void gxLineBuilder(GSOLayer layer, LineParam lineParam)
+ {
+ ModelBuilder lineBuilder = new GXBuilder(datasource);
+ lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update,
+ checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam);
+ }
+
private EnumValidateType getEnumValidateType()
{
if (comboBoxExWidth.Text != "")
diff --git a/LSPipeline.csproj b/LSPipeline.csproj
index 477d8ba..599b492 100644
--- a/LSPipeline.csproj
+++ b/LSPipeline.csproj
@@ -222,6 +222,7 @@
FrmUpdateLayerFieldValues.cs
+
Form
@@ -243,6 +244,7 @@
+
True
diff --git a/LSPipeline.suo b/LSPipeline.suo
index c930f27..92b5d7d 100644
--- a/LSPipeline.suo
+++ b/LSPipeline.suo
Binary files differ
diff --git a/FrmDatabaseParaSettingOracle.cs b/FrmDatabaseParaSettingOracle.cs
index 18c5e99..6e97dfb 100644
--- a/FrmDatabaseParaSettingOracle.cs
+++ b/FrmDatabaseParaSettingOracle.cs
@@ -47,12 +47,15 @@
}
string serverIp = textBoxIP.Text.Trim();
+ /*
string hostName = System.Net.Dns.GetHostName();
if (serverIp == hostName || serverIp == "localhost"
|| serverIp == System.Net.Dns.GetHostAddresses(hostName).GetValue(2).ToString())
{
serverIp = "127.0.0.1";
}
+ * */
+
DateTime timeStart = DateTime.Now;
GSODataSource ds = globeControl1.Globe.DataManager.GetDataSourceByName(serverIp + "/" + textBoxDatabase.Text.Trim() + "_" + textBoxUser.Text.Trim());
if (ds == null)
@@ -83,7 +86,7 @@
connectParams.dataSourceName = ds.Name;
connectParams.databaseType = EnumDataSourceType.Oracle;
Utility.connectParamsOfDatabase.Add(connectParams);
-
+ setUtilityValue(connectParams);
WriteXML();
MessageBox.Show("连接Oracle数据库成功,用时:" + secondsConnectOracle.ToString() + "秒", "提示");
}
@@ -92,6 +95,14 @@
this.Close();
}
+ private void setUtilityValue(DatabaseConnectParams connectParams)
+ {
+ Utility.DBServer = connectParams.ip;
+ Utility.Database = connectParams.databaseName;
+ Utility.UserID = connectParams.userName;
+ Utility.DBPassword = connectParams.password;
+ }
+
private void ReadXML()
{
string strFileName = Path.GetDirectoryName(Application.ExecutablePath) + "/databaseConfigOracle.xml";
diff --git a/GXBuilder.cs b/GXBuilder.cs
new file mode 100644
index 0000000..b2ec9b2
--- /dev/null
+++ b/GXBuilder.cs
@@ -0,0 +1,187 @@
+using System;
+using System.Data;
+using System.Drawing;
+using System.Runtime.InteropServices;
+using GeoScene.Data;
+using GeoScene.Engine;
+using GeoScene.Globe;
+
+namespace WorldGIS
+{
+ public class GXBuilder : ModelBuilder
+ {
+ private static double diameter = 0.1;
+
+ public GXBuilder(GSODataSource ds)
+ : base(ds)
+ {
+
+ }
+
+ public override bool validate(GSOLayer layer)
+ {
+ return true;
+ }
+
+ ///
+ ///
+ ///
+ /// 追加或修改
+ /// 高程入库或埋深入库
+ ///
+ public override bool doBuild(EnumUpdateMode updateMode,
+ EnumBuildMode buildMode,
+ BaseParam param)
+ {
+ LineParam lineParam = param as LineParam;
+ GSOFeatureDataset newFeatureSet = ds.GetDatasetByName(lineParam.layerName) as GSOFeatureDataset;
+ if (newFeatureSet == null)
+ {
+ newFeatureSet = CreateDBFeatureDataset(layer, lineParam.layerName);
+ }
+ newFeatureSet.Open();
+ GSOFeatures features = layer.GetAllFeatures(true);
+ for (int i = 0; i < features.Length; i++)
+ {
+ GSOFeature f = features[i];
+ GSOGeoPolyline3D lineeee = f.Geometry as GSOGeoPolyline3D;
+ if (lineeee == null || lineeee.GetSpaceLength(true, 6378137) == 0)
+ {
+ LogHelper.Error("出现数据无法入库:" + f.ID);
+ continue;
+ }
+
+ GSOFeature newFeature = newFeatureSet.CreateFeature();
+
+ double radius = diameter; //创建光纤的半径
+ newFeature.Geometry = updateGemotry(f, lineParam, radius, buildMode);
+ newFeature.Geometry.Style = getPipeLineStyle(lineParam, f, radius);
+ newFeature.Name = f.GetFieldAsString(lineParam.uniqueIdFieldName);
+ setFeatureValueByShapeFeature(f, newFeature);
+ // newFeatureSet
+ if (newFeatureSet.GetFeatureByName(newFeature.Name, true).Length > 0)
+ {
+ if (!this.UpdateGXDevice(newFeatureSet.GetFeatureByName(newFeature.Name, true)[0],
+ newFeature))
+ {
+ LogHelper.Error("光纤设备更新失败:" + newFeature.Name+"\r\n");
+ }
+ continue;
+ }
+ newFeatureSet.AddFeature(newFeature);
+ if (!AddGXDevice(newFeature))
+ {
+ LogHelper.Error("光纤数据保存Alarm_Device失败:" + newFeature.Name+"\r\n");
+ }
+ }
+ newFeatureSet.Save();
+ newFeatureSet.Close();
+ return true;
+ }
+
+ private bool AddGXDevice(GSOFeature feature)
+ {
+ //保存数据到设备表
+ try
+ {
+ String deviceType = feature.GetValue("DEVICETYPE") == null
+ ? "" : feature.GetValue("DEVICETYPE").ToString();
+ String devCode = feature.GetValue("DEVICEID") == null
+ ? "" : feature.GetValue("DEVICEID").ToString();
+ String road = feature.GetValue("ROAD") == null
+ ? "" : feature.GetValue("ROAD").ToString();
+
+ //TODO LIST:
+ string sqlCount = "select dbid from alarm_device_type where" +
+ " typename = '" + deviceType + "'";
+ object dbid = OracleUtils.ExecuteScalar(OracleUtils.ConnectionString,
+ CommandType.Text, sqlCount);
+ if (dbid == null)
+ {
+ return false;
+ }
+ int deviceTypeId = int.Parse(dbid.ToString());
+ string sql = "Insert into alarm_device (DBID,ACTIVE,DEVCODE,DEVNAME,FACTORY," +
+ "INSTALLDATE,GAOCHENG,HEIGHT,LATITUDE,LONGTITUDE,DEVICETYPE_ID) " +
+ "values (SEQ_DEVICE_ID.NEXTVAL, 1, '" + devCode + "', '" + deviceType + devCode +
+ "', " + "'航天二院', " + "to_date('" + DateTime.Now.ToString() + "','yyyy/MM/dd hh24:mi::ss'), "
+ + "0, 0, 0, 0, " + deviceTypeId + ")";
+ OracleUtils.ExecuteNonQuery(OracleUtils.ConnectionString, CommandType.Text, sql);
+
+ }
+ catch (Exception e)
+ {
+ throw;
+ }
+ return true;
+ }
+
+ private bool UpdateGXDevice(GSOFeature feature, GSOFeature newFeature)
+ {
+ String deviceType = newFeature.GetValue("DEVICETYPE") == null
+ ? "" : newFeature.GetValue("DEVICETYPE").ToString();
+ String devCode = newFeature.GetValue("DEVICEID") == null
+ ? "" : newFeature.GetValue("DEVICEID").ToString();
+ String road = newFeature.GetValue("ROAD") == null
+ ? "" : newFeature.GetValue("ROAD").ToString();
+
+ feature.Geometry = newFeature.Geometry.Clone();
+ this.setFeatureValueByShapeFeature(newFeature,feature);
+ // feature.Dataset.Save();
+
+ string sqlCount = "select dbid from alarm_device_type where" +
+ " typename = '" + deviceType + "'";
+ object dbid = OracleUtils.ExecuteScalar(OracleUtils.ConnectionString,
+ CommandType.Text, sqlCount);
+ if (dbid == null)
+ {
+ return false;
+ }
+ int deviceTypeId = int.Parse(dbid.ToString());
+
+ string sql = "update alarm_device set FACTORY='" + road +
+ "', DEVICETYPE_ID='" + deviceTypeId +
+ "', DEVNAME='"+deviceType+devCode+"' "+
+ "where devcode='" + devCode + "'";
+ OracleUtils.ExecuteNonQuery(OracleUtils.ConnectionString, CommandType.Text, sql);
+ return true;
+ }
+
+ private GSOLineStyle3D getPipeLineStyle(LineParam lineParam, GSOFeature f, double radius)
+ {
+ GSOPipeLineStyle3D style0 = new GSOPipeLineStyle3D();
+ style0.LineColor = Color.FromArgb(lineParam.transparency, lineParam.lineColor);
+ style0.Slice = lineParam.sliceNum;
+ style0.CornerSliceAngle = lineParam.cornerSliceAngle;
+ style0.Radius = radius;
+ return style0;
+ }
+
+ private GSOGeometry updateGemotry(GSOFeature f, LineParam lineParam, double radius, EnumBuildMode buildMode)
+ {
+
+ f.Geometry.AltitudeMode = (buildMode.Equals(EnumBuildMode.Alititude)) ? EnumAltitudeMode.RelativeToGround : EnumAltitudeMode.Absolute;
+
+ GSOGeoPolyline3D line = f.Geometry as GSOGeoPolyline3D;
+ if (line == null)
+ {
+ return null; //log4net 记录错误处理
+ }
+
+ double deep1 = 0;
+ double deep2 = 0;
+
+ GSOPoint3ds pt3ds = new GSOPoint3ds();
+ for (int n = 0; n < line[0].Count; n++)
+ {
+ GSOPoint3d pt3d = line[0][n];
+ pt3d.Z = 0;
+
+ pt3ds.Add(pt3d);
+ }
+ line[0] = pt3ds;
+ return line;
+ }
+
+ }
+}
diff --git a/HTForms/FrmPipelineModelDataBase.cs b/HTForms/FrmPipelineModelDataBase.cs
index 84a2d7b..3076bdd 100644
--- a/HTForms/FrmPipelineModelDataBase.cs
+++ b/HTForms/FrmPipelineModelDataBase.cs
@@ -91,6 +91,7 @@
}
else
datasource = ds;
+
if (comboBoxExLayer.Text.Trim() == "")
{
MessageBox.Show("请选择一个图层文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
@@ -126,20 +127,12 @@
comboBoxExLayer.Text));
if (layer == null) return;
- FieldValidate fieldValidate = FieldValidateFactory.Create(ValidateConfig.LoadConfig(),
- getEnumValidateType());
-
- if (!fieldValidate.Validate(layer))
+ if (txtModelLayer.Text != "传感设备图层")
{
- DateTime dt=DateTime.Now;
- string logFilePath = Application.StartupPath + "\\log\\" + dt.Year + "\\" + dt.Year + dt.Month + "\\" + dt.Year +
- dt.Month + dt.Day + ".txt";
- MessageBox.Show("选择的数据不符合数据规范,详情见日志" + logFilePath, "提示");
- return;
+ if (!getValidateResult(layer))
+ return;
}
- ModelBuilder lineBuilder = new LineBuilder(datasource);
-
LineParam lineParam = new LineParam();
lineParam.layerName = txtModelLayer.Text;
lineParam.uniqueIdFieldName = cmbID.Text;
@@ -149,14 +142,17 @@
lineParam.diameterFieldName = cmbRadius.Text;
lineParam.relativeMode = (cmbReference.Text == "管顶") ? 0 : 1;
lineParam.lineColor = btnPipelineColor.BackColor;
- lineParam.transparency=Convert.ToByte(ComboboxRansparency.Value);
+ lineParam.transparency = Convert.ToByte(ComboboxRansparency.Value);
lineParam.cornerSliceAngle = Convert.ToDouble(textBoxCornerSliceAngle.Text);
- lineParam.sliceNum=Convert.ToInt32(txtSlice.Text);
+ lineParam.sliceNum = Convert.ToInt32(txtSlice.Text);
lineParam.channelWidth = comboBoxExWidth.Text;
lineParam.channelHeight = comboBoxExHeight.Text;
- lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update,
- checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam);
+ if (txtModelLayer.Text != "传感设备图层")
+ lineBuilder(layer, lineParam);
+ else
+ gxLineBuilder(layer, lineParam);
+
addLayerToGlobeControl(lineParam.layerName);
//this.DialogResult = DialogResult.OK;
MessageBox.Show("入库完成!", "提示");
@@ -167,6 +163,33 @@
}
}
+ bool getValidateResult(GSOLayer layer)
+ {
+ FieldValidate fieldValidate = FieldValidateFactory.Create(ValidateConfig.LoadConfig(),
+ getEnumValidateType());
+
+ if (fieldValidate.Validate(layer)) return true;
+ DateTime dt = DateTime.Now;
+ string logFilePath = Application.StartupPath + "\\log\\" + dt.Year + "\\" + dt.Year + dt.Month +
+ "\\" + dt.Year + dt.Month + dt.Day + ".txt";
+ MessageBox.Show("选择的数据不符合数据规范,详情见日志" + logFilePath, "提示");
+ return false;
+ }
+
+ void lineBuilder(GSOLayer layer,LineParam lineParam)
+ {
+ ModelBuilder lineBuilder = new LineBuilder(datasource);
+ lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update,
+ checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam);
+ }
+
+ void gxLineBuilder(GSOLayer layer, LineParam lineParam)
+ {
+ ModelBuilder lineBuilder = new GXBuilder(datasource);
+ lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update,
+ checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam);
+ }
+
private EnumValidateType getEnumValidateType()
{
if (comboBoxExWidth.Text != "")
diff --git a/LSPipeline.csproj b/LSPipeline.csproj
index 477d8ba..599b492 100644
--- a/LSPipeline.csproj
+++ b/LSPipeline.csproj
@@ -222,6 +222,7 @@
FrmUpdateLayerFieldValues.cs
+
Form
@@ -243,6 +244,7 @@
+
True
diff --git a/LSPipeline.suo b/LSPipeline.suo
index c930f27..92b5d7d 100644
--- a/LSPipeline.suo
+++ b/LSPipeline.suo
Binary files differ
diff --git a/OracleUtils.cs b/OracleUtils.cs
new file mode 100644
index 0000000..c79d316
--- /dev/null
+++ b/OracleUtils.cs
@@ -0,0 +1,1271 @@
+using System;
+using System.Collections;
+using System.Data;
+using System.Data.OracleClient;
+
+namespace WorldGIS
+{
+ public abstract class OracleUtils
+ {
+ // Read the connection strings from the configuration file
+ //public static readonly string ConnectionString = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
+ public static readonly string ConnectionString = @"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=" + Utility.DBServer
+ + ")(PORT=1521))(CONNECT_DATA=(SID=" + Utility.Database
+ + ")));Persist Security Info=True;User Id=" + Utility.UserID
+ + "; Password=" + Utility.DBPassword + "";
+
+ //Create a hashtable for the parameter cached
+ private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());
+
+ #region private utility methods & constructors
+
+ //Since this class provides only static methods, make the default constructor private to prevent
+ //instances from being created with "new SqlHelper()".
+ private OracleUtils() { }
+
+ ///
+ /// This method is used to attach array of SqlParameters to a SqlCommand.
+ ///
+ /// This method will assign a value of DbNull to any parameter with a direction of
+ /// InputOutput and a value of null.
+ ///
+ /// This behavior will prevent default values from being used, but
+ /// this will be the less common case than an intended pure output parameter (derived as InputOutput)
+ /// where the user provided no input value.
+ ///
+ /// The command to which the parameters will be added
+ /// an array of SqlParameters tho be added to command
+ private static void AttachParameters(OracleCommand command, OracleParameter[] commandParameters)
+ {
+ foreach (OracleParameter p in commandParameters)
+ {
+ //check for derived output value with no value assigned
+ if ((p.Direction == ParameterDirection.InputOutput) && (p.Value == null))
+ {
+ p.Value = DBNull.Value;
+ }
+
+ command.Parameters.Add(p);
+ }
+ }
+
+ ///
+ /// This method assigns an array of values to an array of SqlParameters.
+ ///
+ /// array of SqlParameters to be assigned values
+ /// array of objects holding the values to be assigned
+ private static void AssignParameterValues(OracleParameter[] commandParameters, object[] parameterValues)
+ {
+ if ((commandParameters == null) || (parameterValues == null))
+ {
+ //do nothing if we get no data
+ return;
+ }
+
+ // we must have the same number of values as we pave parameters to put them in
+ if (commandParameters.Length != parameterValues.Length)
+ {
+ throw new ArgumentException("Parameter count does not match Parameter Value count.");
+ }
+
+ //iterate through the SqlParameters, assigning the values from the corresponding position in the
+ //value array
+ for (int i = 0, j = commandParameters.Length; i < j; i++)
+ {
+ commandParameters[i].Value = parameterValues[i];
+ }
+ }
+
+ ///
+ /// This method opens (if necessary) and assigns a connection, transaction, command type and parameters
+ /// to the provided command.
+ ///
+ /// the SqlCommand to be prepared
+ /// a valid OracleConnection, on which to execute this command
+ /// a valid OracleTransaction, or 'null'
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParameters to be associated with the command or 'null' if no parameters are required
+ private static void PrepareCommand(OracleCommand command, OracleConnection connection, OracleTransaction transaction, CommandType commandType, string commandText, OracleParameter[] commandParameters)
+ {
+ //if the provided connection is not open, we will open it
+ if (connection.State != ConnectionState.Open)
+ {
+ connection.Open();
+ }
+
+ //associate the connection with the command
+ command.Connection = connection;
+
+ //set the command text (stored procedure name or SQL statement)
+ command.CommandText = commandText;
+
+ //if we were provided a transaction, assign it.
+ if (transaction != null)
+ {
+ command.Transaction = transaction;
+ }
+
+ //set the command type
+ command.CommandType = commandType;
+
+ //attach the command parameters if they are provided
+ if (commandParameters != null)
+ {
+ AttachParameters(command, commandParameters);
+ }
+ }
+
+
+ #endregion private utility methods & constructors
+
+ #region ExecuteNonQuery
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset and takes no parameters) against the database specified in
+ /// the connection string.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders");
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteNonQuery(connectionString, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset) against the database specified in the connection string
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create & open a OracleConnection, and dispose of it after we are done.
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ {
+ cn.Open();
+
+ //call the overload that takes a connection in place of the connection string
+ return ExecuteNonQuery(cn, commandType, commandText, commandParameters);
+ }
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns no resultset) against the database specified in
+ /// the connection string using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(connString, "PublishOrders", 24, 36);
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored prcedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(string connectionString, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset and takes no parameters) against the provided OracleConnection.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(conn, CommandType.StoredProcedure, "PublishOrders");
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleConnection connection, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteNonQuery(connection, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset) against the specified OracleConnection
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(conn, CommandType.StoredProcedure, "PublishOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, connection, null, commandType, commandText, commandParameters);
+
+ //finally, execute the command.
+ int retval = cmd.ExecuteNonQuery();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+ }
+
+ public static int ExecuteNonQueryWithTimeout(string connectionString, CommandType commandType, string commandText, int cmdTimeout)
+ {
+ //create a command and prepare it for execution
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ {
+ cn.Open();
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, cn, null, commandType, commandText, null);
+ cmd.CommandTimeout = cmdTimeout;
+ //finally, execute the command.
+ int retval = cmd.ExecuteNonQuery();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+ }
+
+ }
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns no resultset) against the specified OracleConnection
+ /// using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(conn, "PublishOrders", 24, 36);
+ ///
+ /// a valid OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleConnection connection, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteNonQuery(connection, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteNonQuery(connection, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset and takes no parameters) against the provided OracleTransaction.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "PublishOrders");
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleTransaction transaction, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteNonQuery(transaction, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset) against the specified OracleTransaction
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);
+
+ //finally, execute the command.
+ int retval = cmd.ExecuteNonQuery();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns no resultset) against the specified
+ /// OracleTransaction using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(conn, trans, "PublishOrders", 24, 36);
+ ///
+ /// a valid OracleTransaction
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleTransaction transaction, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName);
+ }
+
+
+ #endregion ExecuteNonQuery
+
+ #region ExecuteDataSet
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the database specified in
+ /// the connection string.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(connString, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(string connectionString, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteDataset(connectionString, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the database specified in the connection string
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(connString, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create & open a OracleConnection, and dispose of it after we are done.
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ {
+ cn.Open();
+
+ //call the overload that takes a connection in place of the connection string
+ return ExecuteDataset(cn, commandType, commandText, commandParameters);
+ }
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the database specified in
+ /// the connection string using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(connString, "GetOrders", 24, 36);
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(string connectionString, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteDataset(connectionString, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteDataset(connectionString, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided OracleConnection.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(conn, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleConnection connection, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteDataset(connection, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the specified OracleConnection
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(conn, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, connection, null, commandType, commandText, commandParameters);
+
+ //create the DataAdapter & DataSet
+ OracleDataAdapter da = new OracleDataAdapter(cmd);
+ DataSet ds = new DataSet();
+
+ //fill the DataSet using default values for DataTable names, etc.
+ da.Fill(ds);
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+
+ //return the dataset
+ return ds;
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified OracleConnection
+ /// using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(conn, "GetOrders", 24, 36);
+ ///
+ /// a valid OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleConnection connection, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteDataset(connection, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteDataset(connection, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided OracleTransaction.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(trans, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleTransaction transaction, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteDataset(transaction, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the specified OracleTransaction
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(trans, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);
+
+ //create the DataAdapter & DataSet
+ OracleDataAdapter da = new OracleDataAdapter(cmd);
+ DataSet ds = new DataSet();
+
+ //fill the DataSet using default values for DataTable names, etc.
+ da.Fill(ds);
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+
+ //return the dataset
+ return ds;
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified
+ /// OracleTransaction using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(trans, "GetOrders", 24, 36);
+ ///
+ /// a valid OracleTransaction
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleTransaction transaction, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteDataset(transaction, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteDataset(transaction, CommandType.StoredProcedure, spName);
+ }
+
+ #endregion ExecuteDataSet
+
+ #region ExecuteReader
+
+ ///
+ /// this enum is used to indicate whether the connection was provided by the caller, or created by SqlHelper, so that
+ /// we can set the appropriate CommandBehavior when calling ExecuteReader()
+ ///
+ private enum OracleConnectionOwnership
+ {
+ /// Connection is owned and managed by SqlHelper
+ Internal,
+ /// Connection is owned and managed by the caller
+ External
+ }
+
+ ///
+ /// Create and prepare a SqlCommand, and call ExecuteReader with the appropriate CommandBehavior.
+ ///
+ ///
+ /// If we created and opened the connection, we want the connection to be closed when the DataReader is closed.
+ ///
+ /// If the caller provided the connection, we want to leave it to them to manage.
+ ///
+ /// a valid OracleConnection, on which to execute this command
+ /// a valid OracleTransaction, or 'null'
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParameters to be associated with the command or 'null' if no parameters are required
+ /// indicates whether the connection parameter was provided by the caller, or created by SqlHelper
+ /// SqlDataReader containing the results of the command
+ private static OracleDataReader ExecuteReader(OracleConnection connection, OracleTransaction transaction, CommandType commandType, string commandText, OracleParameter[] commandParameters, OracleConnectionOwnership connectionOwnership)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, connection, transaction, commandType, commandText, commandParameters);
+
+ //create a reader
+ OracleDataReader dr;
+
+ // call ExecuteReader with the appropriate CommandBehavior
+ if (connectionOwnership == OracleConnectionOwnership.External)
+ {
+ dr = cmd.ExecuteReader();
+ }
+ else
+ {
+ dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
+
+ }
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+
+ return dr;
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the database specified in
+ /// the connection string.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(connString, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(string connectionString, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteReader(connectionString, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the database specified in the connection string
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(connString, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create & open a OracleConnection
+ OracleConnection cn = new OracleConnection(connectionString);
+ cn.Open();
+
+ try
+ {
+ //call the private overload that takes an internally owned connection in place of the connection string
+ return ExecuteReader(cn, null, commandType, commandText, commandParameters, OracleConnectionOwnership.Internal);
+ }
+ catch
+ {
+ //if we fail to return the SqlDatReader, we need to close the connection ourselves
+ cn.Close();
+ throw;
+ }
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the database specified in
+ /// the connection string using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(connString, "GetOrders", 24, 36);
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(string connectionString, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteReader(connectionString, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteReader(connectionString, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided OracleConnection.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(conn, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleConnection connection, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteReader(connection, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the specified OracleConnection
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(conn, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //pass through the call to the private overload using a null transaction value and an externally owned connection
+ return ExecuteReader(connection, null, commandType, commandText, commandParameters, OracleConnectionOwnership.External);
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified OracleConnection
+ /// using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(conn, "GetOrders", 24, 36);
+ ///
+ /// a valid OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleConnection connection, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);
+
+ AssignParameterValues(commandParameters, parameterValues);
+
+ return ExecuteReader(connection, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteReader(connection, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided OracleTransaction.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(trans, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleTransaction transaction, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteReader(transaction, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the specified OracleTransaction
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(trans, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //pass through to private overload, indicating that the connection is owned by the caller
+ return ExecuteReader(transaction.Connection, transaction, commandType, commandText, commandParameters, OracleConnectionOwnership.External);
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified
+ /// OracleTransaction using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(trans, "GetOrders", 24, 36);
+ ///
+ /// a valid OracleTransaction
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleTransaction transaction, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);
+
+ AssignParameterValues(commandParameters, parameterValues);
+
+ return ExecuteReader(transaction, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteReader(transaction, CommandType.StoredProcedure, spName);
+ }
+
+ #endregion ExecuteReader
+
+ #region ExecuteScalar
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset and takes no parameters) against the database specified in
+ /// the connection string.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(connString, CommandType.StoredProcedure, "GetOrderCount");
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(string connectionString, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteScalar(connectionString, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset) against the database specified in the connection string
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(connString, CommandType.StoredProcedure, "GetOrderCount", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create & open a OracleConnection, and dispose of it after we are done.
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ {
+ cn.Open();
+
+ //call the overload that takes a connection in place of the connection string
+ return ExecuteScalar(cn, commandType, commandText, commandParameters);
+ }
+ }
+
+ ///
+ /// Execute a stored procedure via a OracleCommand (that returns a 1x1 resultset) against the database specified in
+ /// the connection string using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(connString, "GetOrderCount", 24, 36);
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(string connectionString, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteScalar(connectionString, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteScalar(connectionString, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset and takes no parameters) against the provided OracleConnection.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(conn, CommandType.StoredProcedure, "GetOrderCount");
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleConnection connection, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteScalar(connection, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset) against the specified OracleConnection
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(conn, CommandType.StoredProcedure, "GetOrderCount", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, connection, null, commandType, commandText, commandParameters);
+
+ //execute the command & return the results
+ object retval = cmd.ExecuteScalar();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+
+ }
+
+ ///
+ /// Execute a stored procedure via a OracleCommand (that returns a 1x1 resultset) against the specified OracleConnection
+ /// using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(conn, "GetOrderCount", 24, 36);
+ ///
+ /// a valid OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleConnection connection, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteScalar(connection, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteScalar(connection, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset and takes no parameters) against the provided OracleTransaction.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(trans, CommandType.StoredProcedure, "GetOrderCount");
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleTransaction transaction, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteScalar(transaction, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset) against the specified OracleTransaction
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(trans, CommandType.StoredProcedure, "GetOrderCount", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);
+
+ //execute the command & return the results
+ object retval = cmd.ExecuteScalar();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+ }
+
+ ///
+ /// Execute a stored procedure via a OracleCommand (that returns a 1x1 resultset) against the specified
+ /// OracleTransaction using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(trans, "GetOrderCount", 24, 36);
+ ///
+ /// a valid OracleTransaction
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleTransaction transaction, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteScalar(transaction, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteScalar(transaction, CommandType.StoredProcedure, spName);
+ }
+
+ #endregion ExecuteScalar
+
+
+ }
+ ///
+ /// OracleHelperParameterCache provides functions to leverage a static cache of procedure parameters, and the
+ /// ability to discover parameters for stored procedures at run-time.
+ ///
+ ///
+
+ public sealed class OracleHelperParameterCache
+ {
+ #region private methods, variables, and constructors
+
+ //Since this class provides only static methods, make the default constructor private to prevent
+ //instances from being created with "new SqlHelperParameterCache()".
+ private OracleHelperParameterCache() { }
+
+ private static Hashtable paramCache = Hashtable.Synchronized(new Hashtable());
+
+ ///
+ /// resolve at run time the appropriate set of SqlParameters for a stored procedure
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// whether or not to include their return value parameter
+ ///
+ private static OracleParameter[] DiscoverSpParameterSet(string connectionString, string spName, bool includeReturnValueParameter)
+ {
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ using (OracleCommand cmd = new OracleCommand(spName, cn))
+ {
+ cn.Open();
+ cmd.CommandType = CommandType.StoredProcedure;
+ OracleCommandBuilder.DeriveParameters(cmd);
+
+ if (!includeReturnValueParameter)
+ {
+ cmd.Parameters.RemoveAt(0);
+ }
+
+ OracleParameter[] discoveredParameters = new OracleParameter[cmd.Parameters.Count]; ;
+
+ cmd.Parameters.CopyTo(discoveredParameters, 0);
+
+ return discoveredParameters;
+ }
+ }
+
+ //deep copy of cached OracleParameter array
+ private static OracleParameter[] CloneParameters(OracleParameter[] originalParameters)
+ {
+ OracleParameter[] clonedParameters = new OracleParameter[originalParameters.Length];
+
+ for (int i = 0, j = originalParameters.Length; i < j; i++)
+ {
+ clonedParameters[i] = (OracleParameter)((ICloneable)originalParameters[i]).Clone();
+ }
+
+ return clonedParameters;
+ }
+
+ #endregion private methods, variables, and constructors
+
+ #region caching functions
+
+ ///
+ /// add parameter array to the cache
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters to be cached
+ public static void CacheParameterSet(string connectionString, string commandText, params OracleParameter[] commandParameters)
+ {
+ string hashKey = connectionString + ":" + commandText;
+
+ paramCache[hashKey] = commandParameters;
+ }
+
+ ///
+ /// retrieve a parameter array from the cache
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters
+ public static OracleParameter[] GetCachedParameterSet(string connectionString, string commandText)
+ {
+ string hashKey = connectionString + ":" + commandText;
+
+ OracleParameter[] cachedParameters = (OracleParameter[])paramCache[hashKey];
+
+ if (cachedParameters == null)
+ {
+ return null;
+ }
+ return CloneParameters(cachedParameters);
+ }
+
+ #endregion caching functions
+
+ #region Parameter Discovery Functions
+
+ ///
+ /// Retrieves the set of SqlParameters appropriate for the stored procedure
+ ///
+ ///
+ /// This method will query the database for this information, and then store it in a cache for future requests.
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// an array of SqlParameters
+ public static OracleParameter[] GetSpParameterSet(string connectionString, string spName)
+ {
+ return GetSpParameterSet(connectionString, spName, false);
+ }
+
+ ///
+ /// Retrieves the set of SqlParameters appropriate for the stored procedure
+ ///
+ ///
+ /// This method will query the database for this information, and then store it in a cache for future requests.
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// a bool value indicating whether the return value parameter should be included in the results
+ /// an array of SqlParameters
+ public static OracleParameter[] GetSpParameterSet(string connectionString, string spName, bool includeReturnValueParameter)
+ {
+ string hashKey = connectionString + ":" + spName + (includeReturnValueParameter ? ":include ReturnValue Parameter" : "");
+
+ OracleParameter[] cachedParameters;
+
+ cachedParameters = (OracleParameter[])paramCache[hashKey];
+
+ if (cachedParameters == null)
+ {
+ cachedParameters = (OracleParameter[])(paramCache[hashKey] = DiscoverSpParameterSet(connectionString, spName, includeReturnValueParameter));
+ }
+
+ return CloneParameters(cachedParameters);
+ }
+
+ #endregion Parameter Discovery Functions
+ }
+}
diff --git a/FrmDatabaseParaSettingOracle.cs b/FrmDatabaseParaSettingOracle.cs
index 18c5e99..6e97dfb 100644
--- a/FrmDatabaseParaSettingOracle.cs
+++ b/FrmDatabaseParaSettingOracle.cs
@@ -47,12 +47,15 @@
}
string serverIp = textBoxIP.Text.Trim();
+ /*
string hostName = System.Net.Dns.GetHostName();
if (serverIp == hostName || serverIp == "localhost"
|| serverIp == System.Net.Dns.GetHostAddresses(hostName).GetValue(2).ToString())
{
serverIp = "127.0.0.1";
}
+ * */
+
DateTime timeStart = DateTime.Now;
GSODataSource ds = globeControl1.Globe.DataManager.GetDataSourceByName(serverIp + "/" + textBoxDatabase.Text.Trim() + "_" + textBoxUser.Text.Trim());
if (ds == null)
@@ -83,7 +86,7 @@
connectParams.dataSourceName = ds.Name;
connectParams.databaseType = EnumDataSourceType.Oracle;
Utility.connectParamsOfDatabase.Add(connectParams);
-
+ setUtilityValue(connectParams);
WriteXML();
MessageBox.Show("连接Oracle数据库成功,用时:" + secondsConnectOracle.ToString() + "秒", "提示");
}
@@ -92,6 +95,14 @@
this.Close();
}
+ private void setUtilityValue(DatabaseConnectParams connectParams)
+ {
+ Utility.DBServer = connectParams.ip;
+ Utility.Database = connectParams.databaseName;
+ Utility.UserID = connectParams.userName;
+ Utility.DBPassword = connectParams.password;
+ }
+
private void ReadXML()
{
string strFileName = Path.GetDirectoryName(Application.ExecutablePath) + "/databaseConfigOracle.xml";
diff --git a/GXBuilder.cs b/GXBuilder.cs
new file mode 100644
index 0000000..b2ec9b2
--- /dev/null
+++ b/GXBuilder.cs
@@ -0,0 +1,187 @@
+using System;
+using System.Data;
+using System.Drawing;
+using System.Runtime.InteropServices;
+using GeoScene.Data;
+using GeoScene.Engine;
+using GeoScene.Globe;
+
+namespace WorldGIS
+{
+ public class GXBuilder : ModelBuilder
+ {
+ private static double diameter = 0.1;
+
+ public GXBuilder(GSODataSource ds)
+ : base(ds)
+ {
+
+ }
+
+ public override bool validate(GSOLayer layer)
+ {
+ return true;
+ }
+
+ ///
+ ///
+ ///
+ /// 追加或修改
+ /// 高程入库或埋深入库
+ ///
+ public override bool doBuild(EnumUpdateMode updateMode,
+ EnumBuildMode buildMode,
+ BaseParam param)
+ {
+ LineParam lineParam = param as LineParam;
+ GSOFeatureDataset newFeatureSet = ds.GetDatasetByName(lineParam.layerName) as GSOFeatureDataset;
+ if (newFeatureSet == null)
+ {
+ newFeatureSet = CreateDBFeatureDataset(layer, lineParam.layerName);
+ }
+ newFeatureSet.Open();
+ GSOFeatures features = layer.GetAllFeatures(true);
+ for (int i = 0; i < features.Length; i++)
+ {
+ GSOFeature f = features[i];
+ GSOGeoPolyline3D lineeee = f.Geometry as GSOGeoPolyline3D;
+ if (lineeee == null || lineeee.GetSpaceLength(true, 6378137) == 0)
+ {
+ LogHelper.Error("出现数据无法入库:" + f.ID);
+ continue;
+ }
+
+ GSOFeature newFeature = newFeatureSet.CreateFeature();
+
+ double radius = diameter; //创建光纤的半径
+ newFeature.Geometry = updateGemotry(f, lineParam, radius, buildMode);
+ newFeature.Geometry.Style = getPipeLineStyle(lineParam, f, radius);
+ newFeature.Name = f.GetFieldAsString(lineParam.uniqueIdFieldName);
+ setFeatureValueByShapeFeature(f, newFeature);
+ // newFeatureSet
+ if (newFeatureSet.GetFeatureByName(newFeature.Name, true).Length > 0)
+ {
+ if (!this.UpdateGXDevice(newFeatureSet.GetFeatureByName(newFeature.Name, true)[0],
+ newFeature))
+ {
+ LogHelper.Error("光纤设备更新失败:" + newFeature.Name+"\r\n");
+ }
+ continue;
+ }
+ newFeatureSet.AddFeature(newFeature);
+ if (!AddGXDevice(newFeature))
+ {
+ LogHelper.Error("光纤数据保存Alarm_Device失败:" + newFeature.Name+"\r\n");
+ }
+ }
+ newFeatureSet.Save();
+ newFeatureSet.Close();
+ return true;
+ }
+
+ private bool AddGXDevice(GSOFeature feature)
+ {
+ //保存数据到设备表
+ try
+ {
+ String deviceType = feature.GetValue("DEVICETYPE") == null
+ ? "" : feature.GetValue("DEVICETYPE").ToString();
+ String devCode = feature.GetValue("DEVICEID") == null
+ ? "" : feature.GetValue("DEVICEID").ToString();
+ String road = feature.GetValue("ROAD") == null
+ ? "" : feature.GetValue("ROAD").ToString();
+
+ //TODO LIST:
+ string sqlCount = "select dbid from alarm_device_type where" +
+ " typename = '" + deviceType + "'";
+ object dbid = OracleUtils.ExecuteScalar(OracleUtils.ConnectionString,
+ CommandType.Text, sqlCount);
+ if (dbid == null)
+ {
+ return false;
+ }
+ int deviceTypeId = int.Parse(dbid.ToString());
+ string sql = "Insert into alarm_device (DBID,ACTIVE,DEVCODE,DEVNAME,FACTORY," +
+ "INSTALLDATE,GAOCHENG,HEIGHT,LATITUDE,LONGTITUDE,DEVICETYPE_ID) " +
+ "values (SEQ_DEVICE_ID.NEXTVAL, 1, '" + devCode + "', '" + deviceType + devCode +
+ "', " + "'航天二院', " + "to_date('" + DateTime.Now.ToString() + "','yyyy/MM/dd hh24:mi::ss'), "
+ + "0, 0, 0, 0, " + deviceTypeId + ")";
+ OracleUtils.ExecuteNonQuery(OracleUtils.ConnectionString, CommandType.Text, sql);
+
+ }
+ catch (Exception e)
+ {
+ throw;
+ }
+ return true;
+ }
+
+ private bool UpdateGXDevice(GSOFeature feature, GSOFeature newFeature)
+ {
+ String deviceType = newFeature.GetValue("DEVICETYPE") == null
+ ? "" : newFeature.GetValue("DEVICETYPE").ToString();
+ String devCode = newFeature.GetValue("DEVICEID") == null
+ ? "" : newFeature.GetValue("DEVICEID").ToString();
+ String road = newFeature.GetValue("ROAD") == null
+ ? "" : newFeature.GetValue("ROAD").ToString();
+
+ feature.Geometry = newFeature.Geometry.Clone();
+ this.setFeatureValueByShapeFeature(newFeature,feature);
+ // feature.Dataset.Save();
+
+ string sqlCount = "select dbid from alarm_device_type where" +
+ " typename = '" + deviceType + "'";
+ object dbid = OracleUtils.ExecuteScalar(OracleUtils.ConnectionString,
+ CommandType.Text, sqlCount);
+ if (dbid == null)
+ {
+ return false;
+ }
+ int deviceTypeId = int.Parse(dbid.ToString());
+
+ string sql = "update alarm_device set FACTORY='" + road +
+ "', DEVICETYPE_ID='" + deviceTypeId +
+ "', DEVNAME='"+deviceType+devCode+"' "+
+ "where devcode='" + devCode + "'";
+ OracleUtils.ExecuteNonQuery(OracleUtils.ConnectionString, CommandType.Text, sql);
+ return true;
+ }
+
+ private GSOLineStyle3D getPipeLineStyle(LineParam lineParam, GSOFeature f, double radius)
+ {
+ GSOPipeLineStyle3D style0 = new GSOPipeLineStyle3D();
+ style0.LineColor = Color.FromArgb(lineParam.transparency, lineParam.lineColor);
+ style0.Slice = lineParam.sliceNum;
+ style0.CornerSliceAngle = lineParam.cornerSliceAngle;
+ style0.Radius = radius;
+ return style0;
+ }
+
+ private GSOGeometry updateGemotry(GSOFeature f, LineParam lineParam, double radius, EnumBuildMode buildMode)
+ {
+
+ f.Geometry.AltitudeMode = (buildMode.Equals(EnumBuildMode.Alititude)) ? EnumAltitudeMode.RelativeToGround : EnumAltitudeMode.Absolute;
+
+ GSOGeoPolyline3D line = f.Geometry as GSOGeoPolyline3D;
+ if (line == null)
+ {
+ return null; //log4net 记录错误处理
+ }
+
+ double deep1 = 0;
+ double deep2 = 0;
+
+ GSOPoint3ds pt3ds = new GSOPoint3ds();
+ for (int n = 0; n < line[0].Count; n++)
+ {
+ GSOPoint3d pt3d = line[0][n];
+ pt3d.Z = 0;
+
+ pt3ds.Add(pt3d);
+ }
+ line[0] = pt3ds;
+ return line;
+ }
+
+ }
+}
diff --git a/HTForms/FrmPipelineModelDataBase.cs b/HTForms/FrmPipelineModelDataBase.cs
index 84a2d7b..3076bdd 100644
--- a/HTForms/FrmPipelineModelDataBase.cs
+++ b/HTForms/FrmPipelineModelDataBase.cs
@@ -91,6 +91,7 @@
}
else
datasource = ds;
+
if (comboBoxExLayer.Text.Trim() == "")
{
MessageBox.Show("请选择一个图层文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
@@ -126,20 +127,12 @@
comboBoxExLayer.Text));
if (layer == null) return;
- FieldValidate fieldValidate = FieldValidateFactory.Create(ValidateConfig.LoadConfig(),
- getEnumValidateType());
-
- if (!fieldValidate.Validate(layer))
+ if (txtModelLayer.Text != "传感设备图层")
{
- DateTime dt=DateTime.Now;
- string logFilePath = Application.StartupPath + "\\log\\" + dt.Year + "\\" + dt.Year + dt.Month + "\\" + dt.Year +
- dt.Month + dt.Day + ".txt";
- MessageBox.Show("选择的数据不符合数据规范,详情见日志" + logFilePath, "提示");
- return;
+ if (!getValidateResult(layer))
+ return;
}
- ModelBuilder lineBuilder = new LineBuilder(datasource);
-
LineParam lineParam = new LineParam();
lineParam.layerName = txtModelLayer.Text;
lineParam.uniqueIdFieldName = cmbID.Text;
@@ -149,14 +142,17 @@
lineParam.diameterFieldName = cmbRadius.Text;
lineParam.relativeMode = (cmbReference.Text == "管顶") ? 0 : 1;
lineParam.lineColor = btnPipelineColor.BackColor;
- lineParam.transparency=Convert.ToByte(ComboboxRansparency.Value);
+ lineParam.transparency = Convert.ToByte(ComboboxRansparency.Value);
lineParam.cornerSliceAngle = Convert.ToDouble(textBoxCornerSliceAngle.Text);
- lineParam.sliceNum=Convert.ToInt32(txtSlice.Text);
+ lineParam.sliceNum = Convert.ToInt32(txtSlice.Text);
lineParam.channelWidth = comboBoxExWidth.Text;
lineParam.channelHeight = comboBoxExHeight.Text;
- lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update,
- checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam);
+ if (txtModelLayer.Text != "传感设备图层")
+ lineBuilder(layer, lineParam);
+ else
+ gxLineBuilder(layer, lineParam);
+
addLayerToGlobeControl(lineParam.layerName);
//this.DialogResult = DialogResult.OK;
MessageBox.Show("入库完成!", "提示");
@@ -167,6 +163,33 @@
}
}
+ bool getValidateResult(GSOLayer layer)
+ {
+ FieldValidate fieldValidate = FieldValidateFactory.Create(ValidateConfig.LoadConfig(),
+ getEnumValidateType());
+
+ if (fieldValidate.Validate(layer)) return true;
+ DateTime dt = DateTime.Now;
+ string logFilePath = Application.StartupPath + "\\log\\" + dt.Year + "\\" + dt.Year + dt.Month +
+ "\\" + dt.Year + dt.Month + dt.Day + ".txt";
+ MessageBox.Show("选择的数据不符合数据规范,详情见日志" + logFilePath, "提示");
+ return false;
+ }
+
+ void lineBuilder(GSOLayer layer,LineParam lineParam)
+ {
+ ModelBuilder lineBuilder = new LineBuilder(datasource);
+ lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update,
+ checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam);
+ }
+
+ void gxLineBuilder(GSOLayer layer, LineParam lineParam)
+ {
+ ModelBuilder lineBuilder = new GXBuilder(datasource);
+ lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update,
+ checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam);
+ }
+
private EnumValidateType getEnumValidateType()
{
if (comboBoxExWidth.Text != "")
diff --git a/LSPipeline.csproj b/LSPipeline.csproj
index 477d8ba..599b492 100644
--- a/LSPipeline.csproj
+++ b/LSPipeline.csproj
@@ -222,6 +222,7 @@
FrmUpdateLayerFieldValues.cs
+
Form
@@ -243,6 +244,7 @@
+
True
diff --git a/LSPipeline.suo b/LSPipeline.suo
index c930f27..92b5d7d 100644
--- a/LSPipeline.suo
+++ b/LSPipeline.suo
Binary files differ
diff --git a/OracleUtils.cs b/OracleUtils.cs
new file mode 100644
index 0000000..c79d316
--- /dev/null
+++ b/OracleUtils.cs
@@ -0,0 +1,1271 @@
+using System;
+using System.Collections;
+using System.Data;
+using System.Data.OracleClient;
+
+namespace WorldGIS
+{
+ public abstract class OracleUtils
+ {
+ // Read the connection strings from the configuration file
+ //public static readonly string ConnectionString = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
+ public static readonly string ConnectionString = @"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=" + Utility.DBServer
+ + ")(PORT=1521))(CONNECT_DATA=(SID=" + Utility.Database
+ + ")));Persist Security Info=True;User Id=" + Utility.UserID
+ + "; Password=" + Utility.DBPassword + "";
+
+ //Create a hashtable for the parameter cached
+ private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());
+
+ #region private utility methods & constructors
+
+ //Since this class provides only static methods, make the default constructor private to prevent
+ //instances from being created with "new SqlHelper()".
+ private OracleUtils() { }
+
+ ///
+ /// This method is used to attach array of SqlParameters to a SqlCommand.
+ ///
+ /// This method will assign a value of DbNull to any parameter with a direction of
+ /// InputOutput and a value of null.
+ ///
+ /// This behavior will prevent default values from being used, but
+ /// this will be the less common case than an intended pure output parameter (derived as InputOutput)
+ /// where the user provided no input value.
+ ///
+ /// The command to which the parameters will be added
+ /// an array of SqlParameters tho be added to command
+ private static void AttachParameters(OracleCommand command, OracleParameter[] commandParameters)
+ {
+ foreach (OracleParameter p in commandParameters)
+ {
+ //check for derived output value with no value assigned
+ if ((p.Direction == ParameterDirection.InputOutput) && (p.Value == null))
+ {
+ p.Value = DBNull.Value;
+ }
+
+ command.Parameters.Add(p);
+ }
+ }
+
+ ///
+ /// This method assigns an array of values to an array of SqlParameters.
+ ///
+ /// array of SqlParameters to be assigned values
+ /// array of objects holding the values to be assigned
+ private static void AssignParameterValues(OracleParameter[] commandParameters, object[] parameterValues)
+ {
+ if ((commandParameters == null) || (parameterValues == null))
+ {
+ //do nothing if we get no data
+ return;
+ }
+
+ // we must have the same number of values as we pave parameters to put them in
+ if (commandParameters.Length != parameterValues.Length)
+ {
+ throw new ArgumentException("Parameter count does not match Parameter Value count.");
+ }
+
+ //iterate through the SqlParameters, assigning the values from the corresponding position in the
+ //value array
+ for (int i = 0, j = commandParameters.Length; i < j; i++)
+ {
+ commandParameters[i].Value = parameterValues[i];
+ }
+ }
+
+ ///
+ /// This method opens (if necessary) and assigns a connection, transaction, command type and parameters
+ /// to the provided command.
+ ///
+ /// the SqlCommand to be prepared
+ /// a valid OracleConnection, on which to execute this command
+ /// a valid OracleTransaction, or 'null'
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParameters to be associated with the command or 'null' if no parameters are required
+ private static void PrepareCommand(OracleCommand command, OracleConnection connection, OracleTransaction transaction, CommandType commandType, string commandText, OracleParameter[] commandParameters)
+ {
+ //if the provided connection is not open, we will open it
+ if (connection.State != ConnectionState.Open)
+ {
+ connection.Open();
+ }
+
+ //associate the connection with the command
+ command.Connection = connection;
+
+ //set the command text (stored procedure name or SQL statement)
+ command.CommandText = commandText;
+
+ //if we were provided a transaction, assign it.
+ if (transaction != null)
+ {
+ command.Transaction = transaction;
+ }
+
+ //set the command type
+ command.CommandType = commandType;
+
+ //attach the command parameters if they are provided
+ if (commandParameters != null)
+ {
+ AttachParameters(command, commandParameters);
+ }
+ }
+
+
+ #endregion private utility methods & constructors
+
+ #region ExecuteNonQuery
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset and takes no parameters) against the database specified in
+ /// the connection string.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders");
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteNonQuery(connectionString, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset) against the database specified in the connection string
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create & open a OracleConnection, and dispose of it after we are done.
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ {
+ cn.Open();
+
+ //call the overload that takes a connection in place of the connection string
+ return ExecuteNonQuery(cn, commandType, commandText, commandParameters);
+ }
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns no resultset) against the database specified in
+ /// the connection string using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(connString, "PublishOrders", 24, 36);
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored prcedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(string connectionString, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset and takes no parameters) against the provided OracleConnection.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(conn, CommandType.StoredProcedure, "PublishOrders");
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleConnection connection, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteNonQuery(connection, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset) against the specified OracleConnection
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(conn, CommandType.StoredProcedure, "PublishOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, connection, null, commandType, commandText, commandParameters);
+
+ //finally, execute the command.
+ int retval = cmd.ExecuteNonQuery();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+ }
+
+ public static int ExecuteNonQueryWithTimeout(string connectionString, CommandType commandType, string commandText, int cmdTimeout)
+ {
+ //create a command and prepare it for execution
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ {
+ cn.Open();
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, cn, null, commandType, commandText, null);
+ cmd.CommandTimeout = cmdTimeout;
+ //finally, execute the command.
+ int retval = cmd.ExecuteNonQuery();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+ }
+
+ }
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns no resultset) against the specified OracleConnection
+ /// using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(conn, "PublishOrders", 24, 36);
+ ///
+ /// a valid OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleConnection connection, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteNonQuery(connection, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteNonQuery(connection, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset and takes no parameters) against the provided OracleTransaction.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "PublishOrders");
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleTransaction transaction, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteNonQuery(transaction, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset) against the specified OracleTransaction
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);
+
+ //finally, execute the command.
+ int retval = cmd.ExecuteNonQuery();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns no resultset) against the specified
+ /// OracleTransaction using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(conn, trans, "PublishOrders", 24, 36);
+ ///
+ /// a valid OracleTransaction
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleTransaction transaction, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName);
+ }
+
+
+ #endregion ExecuteNonQuery
+
+ #region ExecuteDataSet
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the database specified in
+ /// the connection string.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(connString, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(string connectionString, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteDataset(connectionString, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the database specified in the connection string
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(connString, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create & open a OracleConnection, and dispose of it after we are done.
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ {
+ cn.Open();
+
+ //call the overload that takes a connection in place of the connection string
+ return ExecuteDataset(cn, commandType, commandText, commandParameters);
+ }
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the database specified in
+ /// the connection string using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(connString, "GetOrders", 24, 36);
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(string connectionString, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteDataset(connectionString, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteDataset(connectionString, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided OracleConnection.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(conn, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleConnection connection, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteDataset(connection, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the specified OracleConnection
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(conn, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, connection, null, commandType, commandText, commandParameters);
+
+ //create the DataAdapter & DataSet
+ OracleDataAdapter da = new OracleDataAdapter(cmd);
+ DataSet ds = new DataSet();
+
+ //fill the DataSet using default values for DataTable names, etc.
+ da.Fill(ds);
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+
+ //return the dataset
+ return ds;
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified OracleConnection
+ /// using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(conn, "GetOrders", 24, 36);
+ ///
+ /// a valid OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleConnection connection, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteDataset(connection, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteDataset(connection, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided OracleTransaction.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(trans, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleTransaction transaction, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteDataset(transaction, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the specified OracleTransaction
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(trans, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);
+
+ //create the DataAdapter & DataSet
+ OracleDataAdapter da = new OracleDataAdapter(cmd);
+ DataSet ds = new DataSet();
+
+ //fill the DataSet using default values for DataTable names, etc.
+ da.Fill(ds);
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+
+ //return the dataset
+ return ds;
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified
+ /// OracleTransaction using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(trans, "GetOrders", 24, 36);
+ ///
+ /// a valid OracleTransaction
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleTransaction transaction, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteDataset(transaction, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteDataset(transaction, CommandType.StoredProcedure, spName);
+ }
+
+ #endregion ExecuteDataSet
+
+ #region ExecuteReader
+
+ ///
+ /// this enum is used to indicate whether the connection was provided by the caller, or created by SqlHelper, so that
+ /// we can set the appropriate CommandBehavior when calling ExecuteReader()
+ ///
+ private enum OracleConnectionOwnership
+ {
+ /// Connection is owned and managed by SqlHelper
+ Internal,
+ /// Connection is owned and managed by the caller
+ External
+ }
+
+ ///
+ /// Create and prepare a SqlCommand, and call ExecuteReader with the appropriate CommandBehavior.
+ ///
+ ///
+ /// If we created and opened the connection, we want the connection to be closed when the DataReader is closed.
+ ///
+ /// If the caller provided the connection, we want to leave it to them to manage.
+ ///
+ /// a valid OracleConnection, on which to execute this command
+ /// a valid OracleTransaction, or 'null'
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParameters to be associated with the command or 'null' if no parameters are required
+ /// indicates whether the connection parameter was provided by the caller, or created by SqlHelper
+ /// SqlDataReader containing the results of the command
+ private static OracleDataReader ExecuteReader(OracleConnection connection, OracleTransaction transaction, CommandType commandType, string commandText, OracleParameter[] commandParameters, OracleConnectionOwnership connectionOwnership)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, connection, transaction, commandType, commandText, commandParameters);
+
+ //create a reader
+ OracleDataReader dr;
+
+ // call ExecuteReader with the appropriate CommandBehavior
+ if (connectionOwnership == OracleConnectionOwnership.External)
+ {
+ dr = cmd.ExecuteReader();
+ }
+ else
+ {
+ dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
+
+ }
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+
+ return dr;
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the database specified in
+ /// the connection string.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(connString, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(string connectionString, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteReader(connectionString, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the database specified in the connection string
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(connString, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create & open a OracleConnection
+ OracleConnection cn = new OracleConnection(connectionString);
+ cn.Open();
+
+ try
+ {
+ //call the private overload that takes an internally owned connection in place of the connection string
+ return ExecuteReader(cn, null, commandType, commandText, commandParameters, OracleConnectionOwnership.Internal);
+ }
+ catch
+ {
+ //if we fail to return the SqlDatReader, we need to close the connection ourselves
+ cn.Close();
+ throw;
+ }
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the database specified in
+ /// the connection string using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(connString, "GetOrders", 24, 36);
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(string connectionString, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteReader(connectionString, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteReader(connectionString, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided OracleConnection.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(conn, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleConnection connection, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteReader(connection, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the specified OracleConnection
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(conn, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //pass through the call to the private overload using a null transaction value and an externally owned connection
+ return ExecuteReader(connection, null, commandType, commandText, commandParameters, OracleConnectionOwnership.External);
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified OracleConnection
+ /// using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(conn, "GetOrders", 24, 36);
+ ///
+ /// a valid OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleConnection connection, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);
+
+ AssignParameterValues(commandParameters, parameterValues);
+
+ return ExecuteReader(connection, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteReader(connection, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided OracleTransaction.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(trans, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleTransaction transaction, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteReader(transaction, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the specified OracleTransaction
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(trans, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //pass through to private overload, indicating that the connection is owned by the caller
+ return ExecuteReader(transaction.Connection, transaction, commandType, commandText, commandParameters, OracleConnectionOwnership.External);
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified
+ /// OracleTransaction using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(trans, "GetOrders", 24, 36);
+ ///
+ /// a valid OracleTransaction
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleTransaction transaction, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);
+
+ AssignParameterValues(commandParameters, parameterValues);
+
+ return ExecuteReader(transaction, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteReader(transaction, CommandType.StoredProcedure, spName);
+ }
+
+ #endregion ExecuteReader
+
+ #region ExecuteScalar
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset and takes no parameters) against the database specified in
+ /// the connection string.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(connString, CommandType.StoredProcedure, "GetOrderCount");
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(string connectionString, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteScalar(connectionString, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset) against the database specified in the connection string
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(connString, CommandType.StoredProcedure, "GetOrderCount", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create & open a OracleConnection, and dispose of it after we are done.
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ {
+ cn.Open();
+
+ //call the overload that takes a connection in place of the connection string
+ return ExecuteScalar(cn, commandType, commandText, commandParameters);
+ }
+ }
+
+ ///
+ /// Execute a stored procedure via a OracleCommand (that returns a 1x1 resultset) against the database specified in
+ /// the connection string using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(connString, "GetOrderCount", 24, 36);
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(string connectionString, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteScalar(connectionString, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteScalar(connectionString, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset and takes no parameters) against the provided OracleConnection.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(conn, CommandType.StoredProcedure, "GetOrderCount");
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleConnection connection, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteScalar(connection, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset) against the specified OracleConnection
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(conn, CommandType.StoredProcedure, "GetOrderCount", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, connection, null, commandType, commandText, commandParameters);
+
+ //execute the command & return the results
+ object retval = cmd.ExecuteScalar();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+
+ }
+
+ ///
+ /// Execute a stored procedure via a OracleCommand (that returns a 1x1 resultset) against the specified OracleConnection
+ /// using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(conn, "GetOrderCount", 24, 36);
+ ///
+ /// a valid OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleConnection connection, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteScalar(connection, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteScalar(connection, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset and takes no parameters) against the provided OracleTransaction.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(trans, CommandType.StoredProcedure, "GetOrderCount");
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleTransaction transaction, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteScalar(transaction, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset) against the specified OracleTransaction
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(trans, CommandType.StoredProcedure, "GetOrderCount", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);
+
+ //execute the command & return the results
+ object retval = cmd.ExecuteScalar();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+ }
+
+ ///
+ /// Execute a stored procedure via a OracleCommand (that returns a 1x1 resultset) against the specified
+ /// OracleTransaction using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(trans, "GetOrderCount", 24, 36);
+ ///
+ /// a valid OracleTransaction
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleTransaction transaction, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteScalar(transaction, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteScalar(transaction, CommandType.StoredProcedure, spName);
+ }
+
+ #endregion ExecuteScalar
+
+
+ }
+ ///
+ /// OracleHelperParameterCache provides functions to leverage a static cache of procedure parameters, and the
+ /// ability to discover parameters for stored procedures at run-time.
+ ///
+ ///
+
+ public sealed class OracleHelperParameterCache
+ {
+ #region private methods, variables, and constructors
+
+ //Since this class provides only static methods, make the default constructor private to prevent
+ //instances from being created with "new SqlHelperParameterCache()".
+ private OracleHelperParameterCache() { }
+
+ private static Hashtable paramCache = Hashtable.Synchronized(new Hashtable());
+
+ ///
+ /// resolve at run time the appropriate set of SqlParameters for a stored procedure
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// whether or not to include their return value parameter
+ ///
+ private static OracleParameter[] DiscoverSpParameterSet(string connectionString, string spName, bool includeReturnValueParameter)
+ {
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ using (OracleCommand cmd = new OracleCommand(spName, cn))
+ {
+ cn.Open();
+ cmd.CommandType = CommandType.StoredProcedure;
+ OracleCommandBuilder.DeriveParameters(cmd);
+
+ if (!includeReturnValueParameter)
+ {
+ cmd.Parameters.RemoveAt(0);
+ }
+
+ OracleParameter[] discoveredParameters = new OracleParameter[cmd.Parameters.Count]; ;
+
+ cmd.Parameters.CopyTo(discoveredParameters, 0);
+
+ return discoveredParameters;
+ }
+ }
+
+ //deep copy of cached OracleParameter array
+ private static OracleParameter[] CloneParameters(OracleParameter[] originalParameters)
+ {
+ OracleParameter[] clonedParameters = new OracleParameter[originalParameters.Length];
+
+ for (int i = 0, j = originalParameters.Length; i < j; i++)
+ {
+ clonedParameters[i] = (OracleParameter)((ICloneable)originalParameters[i]).Clone();
+ }
+
+ return clonedParameters;
+ }
+
+ #endregion private methods, variables, and constructors
+
+ #region caching functions
+
+ ///
+ /// add parameter array to the cache
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters to be cached
+ public static void CacheParameterSet(string connectionString, string commandText, params OracleParameter[] commandParameters)
+ {
+ string hashKey = connectionString + ":" + commandText;
+
+ paramCache[hashKey] = commandParameters;
+ }
+
+ ///
+ /// retrieve a parameter array from the cache
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters
+ public static OracleParameter[] GetCachedParameterSet(string connectionString, string commandText)
+ {
+ string hashKey = connectionString + ":" + commandText;
+
+ OracleParameter[] cachedParameters = (OracleParameter[])paramCache[hashKey];
+
+ if (cachedParameters == null)
+ {
+ return null;
+ }
+ return CloneParameters(cachedParameters);
+ }
+
+ #endregion caching functions
+
+ #region Parameter Discovery Functions
+
+ ///
+ /// Retrieves the set of SqlParameters appropriate for the stored procedure
+ ///
+ ///
+ /// This method will query the database for this information, and then store it in a cache for future requests.
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// an array of SqlParameters
+ public static OracleParameter[] GetSpParameterSet(string connectionString, string spName)
+ {
+ return GetSpParameterSet(connectionString, spName, false);
+ }
+
+ ///
+ /// Retrieves the set of SqlParameters appropriate for the stored procedure
+ ///
+ ///
+ /// This method will query the database for this information, and then store it in a cache for future requests.
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// a bool value indicating whether the return value parameter should be included in the results
+ /// an array of SqlParameters
+ public static OracleParameter[] GetSpParameterSet(string connectionString, string spName, bool includeReturnValueParameter)
+ {
+ string hashKey = connectionString + ":" + spName + (includeReturnValueParameter ? ":include ReturnValue Parameter" : "");
+
+ OracleParameter[] cachedParameters;
+
+ cachedParameters = (OracleParameter[])paramCache[hashKey];
+
+ if (cachedParameters == null)
+ {
+ cachedParameters = (OracleParameter[])(paramCache[hashKey] = DiscoverSpParameterSet(connectionString, spName, includeReturnValueParameter));
+ }
+
+ return CloneParameters(cachedParameters);
+ }
+
+ #endregion Parameter Discovery Functions
+ }
+}
diff --git a/Utility.cs b/Utility.cs
index 1429fd9..4e64d66 100644
--- a/Utility.cs
+++ b/Utility.cs
@@ -17,6 +17,11 @@
{
public class Utility
{
+ public static string DBServer;
+ public static string Database;
+ public static string UserID;
+ public static string DBPassword;
+
public static void SetBallons(GSOBalloon featureTooltip,GSOBalloonEx balloonEx)
{
featureTooltip.CacheFilePath = Path.GetDirectoryName(Application.ExecutablePath) + "/GeoScene/Globe/Temp";
diff --git a/FrmDatabaseParaSettingOracle.cs b/FrmDatabaseParaSettingOracle.cs
index 18c5e99..6e97dfb 100644
--- a/FrmDatabaseParaSettingOracle.cs
+++ b/FrmDatabaseParaSettingOracle.cs
@@ -47,12 +47,15 @@
}
string serverIp = textBoxIP.Text.Trim();
+ /*
string hostName = System.Net.Dns.GetHostName();
if (serverIp == hostName || serverIp == "localhost"
|| serverIp == System.Net.Dns.GetHostAddresses(hostName).GetValue(2).ToString())
{
serverIp = "127.0.0.1";
}
+ * */
+
DateTime timeStart = DateTime.Now;
GSODataSource ds = globeControl1.Globe.DataManager.GetDataSourceByName(serverIp + "/" + textBoxDatabase.Text.Trim() + "_" + textBoxUser.Text.Trim());
if (ds == null)
@@ -83,7 +86,7 @@
connectParams.dataSourceName = ds.Name;
connectParams.databaseType = EnumDataSourceType.Oracle;
Utility.connectParamsOfDatabase.Add(connectParams);
-
+ setUtilityValue(connectParams);
WriteXML();
MessageBox.Show("连接Oracle数据库成功,用时:" + secondsConnectOracle.ToString() + "秒", "提示");
}
@@ -92,6 +95,14 @@
this.Close();
}
+ private void setUtilityValue(DatabaseConnectParams connectParams)
+ {
+ Utility.DBServer = connectParams.ip;
+ Utility.Database = connectParams.databaseName;
+ Utility.UserID = connectParams.userName;
+ Utility.DBPassword = connectParams.password;
+ }
+
private void ReadXML()
{
string strFileName = Path.GetDirectoryName(Application.ExecutablePath) + "/databaseConfigOracle.xml";
diff --git a/GXBuilder.cs b/GXBuilder.cs
new file mode 100644
index 0000000..b2ec9b2
--- /dev/null
+++ b/GXBuilder.cs
@@ -0,0 +1,187 @@
+using System;
+using System.Data;
+using System.Drawing;
+using System.Runtime.InteropServices;
+using GeoScene.Data;
+using GeoScene.Engine;
+using GeoScene.Globe;
+
+namespace WorldGIS
+{
+ public class GXBuilder : ModelBuilder
+ {
+ private static double diameter = 0.1;
+
+ public GXBuilder(GSODataSource ds)
+ : base(ds)
+ {
+
+ }
+
+ public override bool validate(GSOLayer layer)
+ {
+ return true;
+ }
+
+ ///
+ ///
+ ///
+ /// 追加或修改
+ /// 高程入库或埋深入库
+ ///
+ public override bool doBuild(EnumUpdateMode updateMode,
+ EnumBuildMode buildMode,
+ BaseParam param)
+ {
+ LineParam lineParam = param as LineParam;
+ GSOFeatureDataset newFeatureSet = ds.GetDatasetByName(lineParam.layerName) as GSOFeatureDataset;
+ if (newFeatureSet == null)
+ {
+ newFeatureSet = CreateDBFeatureDataset(layer, lineParam.layerName);
+ }
+ newFeatureSet.Open();
+ GSOFeatures features = layer.GetAllFeatures(true);
+ for (int i = 0; i < features.Length; i++)
+ {
+ GSOFeature f = features[i];
+ GSOGeoPolyline3D lineeee = f.Geometry as GSOGeoPolyline3D;
+ if (lineeee == null || lineeee.GetSpaceLength(true, 6378137) == 0)
+ {
+ LogHelper.Error("出现数据无法入库:" + f.ID);
+ continue;
+ }
+
+ GSOFeature newFeature = newFeatureSet.CreateFeature();
+
+ double radius = diameter; //创建光纤的半径
+ newFeature.Geometry = updateGemotry(f, lineParam, radius, buildMode);
+ newFeature.Geometry.Style = getPipeLineStyle(lineParam, f, radius);
+ newFeature.Name = f.GetFieldAsString(lineParam.uniqueIdFieldName);
+ setFeatureValueByShapeFeature(f, newFeature);
+ // newFeatureSet
+ if (newFeatureSet.GetFeatureByName(newFeature.Name, true).Length > 0)
+ {
+ if (!this.UpdateGXDevice(newFeatureSet.GetFeatureByName(newFeature.Name, true)[0],
+ newFeature))
+ {
+ LogHelper.Error("光纤设备更新失败:" + newFeature.Name+"\r\n");
+ }
+ continue;
+ }
+ newFeatureSet.AddFeature(newFeature);
+ if (!AddGXDevice(newFeature))
+ {
+ LogHelper.Error("光纤数据保存Alarm_Device失败:" + newFeature.Name+"\r\n");
+ }
+ }
+ newFeatureSet.Save();
+ newFeatureSet.Close();
+ return true;
+ }
+
+ private bool AddGXDevice(GSOFeature feature)
+ {
+ //保存数据到设备表
+ try
+ {
+ String deviceType = feature.GetValue("DEVICETYPE") == null
+ ? "" : feature.GetValue("DEVICETYPE").ToString();
+ String devCode = feature.GetValue("DEVICEID") == null
+ ? "" : feature.GetValue("DEVICEID").ToString();
+ String road = feature.GetValue("ROAD") == null
+ ? "" : feature.GetValue("ROAD").ToString();
+
+ //TODO LIST:
+ string sqlCount = "select dbid from alarm_device_type where" +
+ " typename = '" + deviceType + "'";
+ object dbid = OracleUtils.ExecuteScalar(OracleUtils.ConnectionString,
+ CommandType.Text, sqlCount);
+ if (dbid == null)
+ {
+ return false;
+ }
+ int deviceTypeId = int.Parse(dbid.ToString());
+ string sql = "Insert into alarm_device (DBID,ACTIVE,DEVCODE,DEVNAME,FACTORY," +
+ "INSTALLDATE,GAOCHENG,HEIGHT,LATITUDE,LONGTITUDE,DEVICETYPE_ID) " +
+ "values (SEQ_DEVICE_ID.NEXTVAL, 1, '" + devCode + "', '" + deviceType + devCode +
+ "', " + "'航天二院', " + "to_date('" + DateTime.Now.ToString() + "','yyyy/MM/dd hh24:mi::ss'), "
+ + "0, 0, 0, 0, " + deviceTypeId + ")";
+ OracleUtils.ExecuteNonQuery(OracleUtils.ConnectionString, CommandType.Text, sql);
+
+ }
+ catch (Exception e)
+ {
+ throw;
+ }
+ return true;
+ }
+
+ private bool UpdateGXDevice(GSOFeature feature, GSOFeature newFeature)
+ {
+ String deviceType = newFeature.GetValue("DEVICETYPE") == null
+ ? "" : newFeature.GetValue("DEVICETYPE").ToString();
+ String devCode = newFeature.GetValue("DEVICEID") == null
+ ? "" : newFeature.GetValue("DEVICEID").ToString();
+ String road = newFeature.GetValue("ROAD") == null
+ ? "" : newFeature.GetValue("ROAD").ToString();
+
+ feature.Geometry = newFeature.Geometry.Clone();
+ this.setFeatureValueByShapeFeature(newFeature,feature);
+ // feature.Dataset.Save();
+
+ string sqlCount = "select dbid from alarm_device_type where" +
+ " typename = '" + deviceType + "'";
+ object dbid = OracleUtils.ExecuteScalar(OracleUtils.ConnectionString,
+ CommandType.Text, sqlCount);
+ if (dbid == null)
+ {
+ return false;
+ }
+ int deviceTypeId = int.Parse(dbid.ToString());
+
+ string sql = "update alarm_device set FACTORY='" + road +
+ "', DEVICETYPE_ID='" + deviceTypeId +
+ "', DEVNAME='"+deviceType+devCode+"' "+
+ "where devcode='" + devCode + "'";
+ OracleUtils.ExecuteNonQuery(OracleUtils.ConnectionString, CommandType.Text, sql);
+ return true;
+ }
+
+ private GSOLineStyle3D getPipeLineStyle(LineParam lineParam, GSOFeature f, double radius)
+ {
+ GSOPipeLineStyle3D style0 = new GSOPipeLineStyle3D();
+ style0.LineColor = Color.FromArgb(lineParam.transparency, lineParam.lineColor);
+ style0.Slice = lineParam.sliceNum;
+ style0.CornerSliceAngle = lineParam.cornerSliceAngle;
+ style0.Radius = radius;
+ return style0;
+ }
+
+ private GSOGeometry updateGemotry(GSOFeature f, LineParam lineParam, double radius, EnumBuildMode buildMode)
+ {
+
+ f.Geometry.AltitudeMode = (buildMode.Equals(EnumBuildMode.Alititude)) ? EnumAltitudeMode.RelativeToGround : EnumAltitudeMode.Absolute;
+
+ GSOGeoPolyline3D line = f.Geometry as GSOGeoPolyline3D;
+ if (line == null)
+ {
+ return null; //log4net 记录错误处理
+ }
+
+ double deep1 = 0;
+ double deep2 = 0;
+
+ GSOPoint3ds pt3ds = new GSOPoint3ds();
+ for (int n = 0; n < line[0].Count; n++)
+ {
+ GSOPoint3d pt3d = line[0][n];
+ pt3d.Z = 0;
+
+ pt3ds.Add(pt3d);
+ }
+ line[0] = pt3ds;
+ return line;
+ }
+
+ }
+}
diff --git a/HTForms/FrmPipelineModelDataBase.cs b/HTForms/FrmPipelineModelDataBase.cs
index 84a2d7b..3076bdd 100644
--- a/HTForms/FrmPipelineModelDataBase.cs
+++ b/HTForms/FrmPipelineModelDataBase.cs
@@ -91,6 +91,7 @@
}
else
datasource = ds;
+
if (comboBoxExLayer.Text.Trim() == "")
{
MessageBox.Show("请选择一个图层文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
@@ -126,20 +127,12 @@
comboBoxExLayer.Text));
if (layer == null) return;
- FieldValidate fieldValidate = FieldValidateFactory.Create(ValidateConfig.LoadConfig(),
- getEnumValidateType());
-
- if (!fieldValidate.Validate(layer))
+ if (txtModelLayer.Text != "传感设备图层")
{
- DateTime dt=DateTime.Now;
- string logFilePath = Application.StartupPath + "\\log\\" + dt.Year + "\\" + dt.Year + dt.Month + "\\" + dt.Year +
- dt.Month + dt.Day + ".txt";
- MessageBox.Show("选择的数据不符合数据规范,详情见日志" + logFilePath, "提示");
- return;
+ if (!getValidateResult(layer))
+ return;
}
- ModelBuilder lineBuilder = new LineBuilder(datasource);
-
LineParam lineParam = new LineParam();
lineParam.layerName = txtModelLayer.Text;
lineParam.uniqueIdFieldName = cmbID.Text;
@@ -149,14 +142,17 @@
lineParam.diameterFieldName = cmbRadius.Text;
lineParam.relativeMode = (cmbReference.Text == "管顶") ? 0 : 1;
lineParam.lineColor = btnPipelineColor.BackColor;
- lineParam.transparency=Convert.ToByte(ComboboxRansparency.Value);
+ lineParam.transparency = Convert.ToByte(ComboboxRansparency.Value);
lineParam.cornerSliceAngle = Convert.ToDouble(textBoxCornerSliceAngle.Text);
- lineParam.sliceNum=Convert.ToInt32(txtSlice.Text);
+ lineParam.sliceNum = Convert.ToInt32(txtSlice.Text);
lineParam.channelWidth = comboBoxExWidth.Text;
lineParam.channelHeight = comboBoxExHeight.Text;
- lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update,
- checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam);
+ if (txtModelLayer.Text != "传感设备图层")
+ lineBuilder(layer, lineParam);
+ else
+ gxLineBuilder(layer, lineParam);
+
addLayerToGlobeControl(lineParam.layerName);
//this.DialogResult = DialogResult.OK;
MessageBox.Show("入库完成!", "提示");
@@ -167,6 +163,33 @@
}
}
+ bool getValidateResult(GSOLayer layer)
+ {
+ FieldValidate fieldValidate = FieldValidateFactory.Create(ValidateConfig.LoadConfig(),
+ getEnumValidateType());
+
+ if (fieldValidate.Validate(layer)) return true;
+ DateTime dt = DateTime.Now;
+ string logFilePath = Application.StartupPath + "\\log\\" + dt.Year + "\\" + dt.Year + dt.Month +
+ "\\" + dt.Year + dt.Month + dt.Day + ".txt";
+ MessageBox.Show("选择的数据不符合数据规范,详情见日志" + logFilePath, "提示");
+ return false;
+ }
+
+ void lineBuilder(GSOLayer layer,LineParam lineParam)
+ {
+ ModelBuilder lineBuilder = new LineBuilder(datasource);
+ lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update,
+ checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam);
+ }
+
+ void gxLineBuilder(GSOLayer layer, LineParam lineParam)
+ {
+ ModelBuilder lineBuilder = new GXBuilder(datasource);
+ lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update,
+ checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam);
+ }
+
private EnumValidateType getEnumValidateType()
{
if (comboBoxExWidth.Text != "")
diff --git a/LSPipeline.csproj b/LSPipeline.csproj
index 477d8ba..599b492 100644
--- a/LSPipeline.csproj
+++ b/LSPipeline.csproj
@@ -222,6 +222,7 @@
FrmUpdateLayerFieldValues.cs
+
Form
@@ -243,6 +244,7 @@
+
True
diff --git a/LSPipeline.suo b/LSPipeline.suo
index c930f27..92b5d7d 100644
--- a/LSPipeline.suo
+++ b/LSPipeline.suo
Binary files differ
diff --git a/OracleUtils.cs b/OracleUtils.cs
new file mode 100644
index 0000000..c79d316
--- /dev/null
+++ b/OracleUtils.cs
@@ -0,0 +1,1271 @@
+using System;
+using System.Collections;
+using System.Data;
+using System.Data.OracleClient;
+
+namespace WorldGIS
+{
+ public abstract class OracleUtils
+ {
+ // Read the connection strings from the configuration file
+ //public static readonly string ConnectionString = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
+ public static readonly string ConnectionString = @"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=" + Utility.DBServer
+ + ")(PORT=1521))(CONNECT_DATA=(SID=" + Utility.Database
+ + ")));Persist Security Info=True;User Id=" + Utility.UserID
+ + "; Password=" + Utility.DBPassword + "";
+
+ //Create a hashtable for the parameter cached
+ private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());
+
+ #region private utility methods & constructors
+
+ //Since this class provides only static methods, make the default constructor private to prevent
+ //instances from being created with "new SqlHelper()".
+ private OracleUtils() { }
+
+ ///
+ /// This method is used to attach array of SqlParameters to a SqlCommand.
+ ///
+ /// This method will assign a value of DbNull to any parameter with a direction of
+ /// InputOutput and a value of null.
+ ///
+ /// This behavior will prevent default values from being used, but
+ /// this will be the less common case than an intended pure output parameter (derived as InputOutput)
+ /// where the user provided no input value.
+ ///
+ /// The command to which the parameters will be added
+ /// an array of SqlParameters tho be added to command
+ private static void AttachParameters(OracleCommand command, OracleParameter[] commandParameters)
+ {
+ foreach (OracleParameter p in commandParameters)
+ {
+ //check for derived output value with no value assigned
+ if ((p.Direction == ParameterDirection.InputOutput) && (p.Value == null))
+ {
+ p.Value = DBNull.Value;
+ }
+
+ command.Parameters.Add(p);
+ }
+ }
+
+ ///
+ /// This method assigns an array of values to an array of SqlParameters.
+ ///
+ /// array of SqlParameters to be assigned values
+ /// array of objects holding the values to be assigned
+ private static void AssignParameterValues(OracleParameter[] commandParameters, object[] parameterValues)
+ {
+ if ((commandParameters == null) || (parameterValues == null))
+ {
+ //do nothing if we get no data
+ return;
+ }
+
+ // we must have the same number of values as we pave parameters to put them in
+ if (commandParameters.Length != parameterValues.Length)
+ {
+ throw new ArgumentException("Parameter count does not match Parameter Value count.");
+ }
+
+ //iterate through the SqlParameters, assigning the values from the corresponding position in the
+ //value array
+ for (int i = 0, j = commandParameters.Length; i < j; i++)
+ {
+ commandParameters[i].Value = parameterValues[i];
+ }
+ }
+
+ ///
+ /// This method opens (if necessary) and assigns a connection, transaction, command type and parameters
+ /// to the provided command.
+ ///
+ /// the SqlCommand to be prepared
+ /// a valid OracleConnection, on which to execute this command
+ /// a valid OracleTransaction, or 'null'
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParameters to be associated with the command or 'null' if no parameters are required
+ private static void PrepareCommand(OracleCommand command, OracleConnection connection, OracleTransaction transaction, CommandType commandType, string commandText, OracleParameter[] commandParameters)
+ {
+ //if the provided connection is not open, we will open it
+ if (connection.State != ConnectionState.Open)
+ {
+ connection.Open();
+ }
+
+ //associate the connection with the command
+ command.Connection = connection;
+
+ //set the command text (stored procedure name or SQL statement)
+ command.CommandText = commandText;
+
+ //if we were provided a transaction, assign it.
+ if (transaction != null)
+ {
+ command.Transaction = transaction;
+ }
+
+ //set the command type
+ command.CommandType = commandType;
+
+ //attach the command parameters if they are provided
+ if (commandParameters != null)
+ {
+ AttachParameters(command, commandParameters);
+ }
+ }
+
+
+ #endregion private utility methods & constructors
+
+ #region ExecuteNonQuery
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset and takes no parameters) against the database specified in
+ /// the connection string.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders");
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteNonQuery(connectionString, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset) against the database specified in the connection string
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create & open a OracleConnection, and dispose of it after we are done.
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ {
+ cn.Open();
+
+ //call the overload that takes a connection in place of the connection string
+ return ExecuteNonQuery(cn, commandType, commandText, commandParameters);
+ }
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns no resultset) against the database specified in
+ /// the connection string using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(connString, "PublishOrders", 24, 36);
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored prcedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(string connectionString, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset and takes no parameters) against the provided OracleConnection.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(conn, CommandType.StoredProcedure, "PublishOrders");
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleConnection connection, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteNonQuery(connection, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset) against the specified OracleConnection
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(conn, CommandType.StoredProcedure, "PublishOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, connection, null, commandType, commandText, commandParameters);
+
+ //finally, execute the command.
+ int retval = cmd.ExecuteNonQuery();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+ }
+
+ public static int ExecuteNonQueryWithTimeout(string connectionString, CommandType commandType, string commandText, int cmdTimeout)
+ {
+ //create a command and prepare it for execution
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ {
+ cn.Open();
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, cn, null, commandType, commandText, null);
+ cmd.CommandTimeout = cmdTimeout;
+ //finally, execute the command.
+ int retval = cmd.ExecuteNonQuery();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+ }
+
+ }
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns no resultset) against the specified OracleConnection
+ /// using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(conn, "PublishOrders", 24, 36);
+ ///
+ /// a valid OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleConnection connection, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteNonQuery(connection, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteNonQuery(connection, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset and takes no parameters) against the provided OracleTransaction.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "PublishOrders");
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleTransaction transaction, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteNonQuery(transaction, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset) against the specified OracleTransaction
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);
+
+ //finally, execute the command.
+ int retval = cmd.ExecuteNonQuery();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns no resultset) against the specified
+ /// OracleTransaction using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(conn, trans, "PublishOrders", 24, 36);
+ ///
+ /// a valid OracleTransaction
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleTransaction transaction, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName);
+ }
+
+
+ #endregion ExecuteNonQuery
+
+ #region ExecuteDataSet
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the database specified in
+ /// the connection string.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(connString, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(string connectionString, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteDataset(connectionString, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the database specified in the connection string
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(connString, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create & open a OracleConnection, and dispose of it after we are done.
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ {
+ cn.Open();
+
+ //call the overload that takes a connection in place of the connection string
+ return ExecuteDataset(cn, commandType, commandText, commandParameters);
+ }
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the database specified in
+ /// the connection string using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(connString, "GetOrders", 24, 36);
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(string connectionString, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteDataset(connectionString, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteDataset(connectionString, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided OracleConnection.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(conn, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleConnection connection, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteDataset(connection, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the specified OracleConnection
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(conn, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, connection, null, commandType, commandText, commandParameters);
+
+ //create the DataAdapter & DataSet
+ OracleDataAdapter da = new OracleDataAdapter(cmd);
+ DataSet ds = new DataSet();
+
+ //fill the DataSet using default values for DataTable names, etc.
+ da.Fill(ds);
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+
+ //return the dataset
+ return ds;
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified OracleConnection
+ /// using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(conn, "GetOrders", 24, 36);
+ ///
+ /// a valid OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleConnection connection, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteDataset(connection, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteDataset(connection, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided OracleTransaction.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(trans, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleTransaction transaction, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteDataset(transaction, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the specified OracleTransaction
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(trans, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);
+
+ //create the DataAdapter & DataSet
+ OracleDataAdapter da = new OracleDataAdapter(cmd);
+ DataSet ds = new DataSet();
+
+ //fill the DataSet using default values for DataTable names, etc.
+ da.Fill(ds);
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+
+ //return the dataset
+ return ds;
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified
+ /// OracleTransaction using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(trans, "GetOrders", 24, 36);
+ ///
+ /// a valid OracleTransaction
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleTransaction transaction, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteDataset(transaction, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteDataset(transaction, CommandType.StoredProcedure, spName);
+ }
+
+ #endregion ExecuteDataSet
+
+ #region ExecuteReader
+
+ ///
+ /// this enum is used to indicate whether the connection was provided by the caller, or created by SqlHelper, so that
+ /// we can set the appropriate CommandBehavior when calling ExecuteReader()
+ ///
+ private enum OracleConnectionOwnership
+ {
+ /// Connection is owned and managed by SqlHelper
+ Internal,
+ /// Connection is owned and managed by the caller
+ External
+ }
+
+ ///
+ /// Create and prepare a SqlCommand, and call ExecuteReader with the appropriate CommandBehavior.
+ ///
+ ///
+ /// If we created and opened the connection, we want the connection to be closed when the DataReader is closed.
+ ///
+ /// If the caller provided the connection, we want to leave it to them to manage.
+ ///
+ /// a valid OracleConnection, on which to execute this command
+ /// a valid OracleTransaction, or 'null'
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParameters to be associated with the command or 'null' if no parameters are required
+ /// indicates whether the connection parameter was provided by the caller, or created by SqlHelper
+ /// SqlDataReader containing the results of the command
+ private static OracleDataReader ExecuteReader(OracleConnection connection, OracleTransaction transaction, CommandType commandType, string commandText, OracleParameter[] commandParameters, OracleConnectionOwnership connectionOwnership)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, connection, transaction, commandType, commandText, commandParameters);
+
+ //create a reader
+ OracleDataReader dr;
+
+ // call ExecuteReader with the appropriate CommandBehavior
+ if (connectionOwnership == OracleConnectionOwnership.External)
+ {
+ dr = cmd.ExecuteReader();
+ }
+ else
+ {
+ dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
+
+ }
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+
+ return dr;
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the database specified in
+ /// the connection string.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(connString, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(string connectionString, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteReader(connectionString, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the database specified in the connection string
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(connString, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create & open a OracleConnection
+ OracleConnection cn = new OracleConnection(connectionString);
+ cn.Open();
+
+ try
+ {
+ //call the private overload that takes an internally owned connection in place of the connection string
+ return ExecuteReader(cn, null, commandType, commandText, commandParameters, OracleConnectionOwnership.Internal);
+ }
+ catch
+ {
+ //if we fail to return the SqlDatReader, we need to close the connection ourselves
+ cn.Close();
+ throw;
+ }
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the database specified in
+ /// the connection string using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(connString, "GetOrders", 24, 36);
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(string connectionString, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteReader(connectionString, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteReader(connectionString, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided OracleConnection.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(conn, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleConnection connection, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteReader(connection, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the specified OracleConnection
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(conn, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //pass through the call to the private overload using a null transaction value and an externally owned connection
+ return ExecuteReader(connection, null, commandType, commandText, commandParameters, OracleConnectionOwnership.External);
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified OracleConnection
+ /// using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(conn, "GetOrders", 24, 36);
+ ///
+ /// a valid OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleConnection connection, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);
+
+ AssignParameterValues(commandParameters, parameterValues);
+
+ return ExecuteReader(connection, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteReader(connection, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided OracleTransaction.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(trans, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleTransaction transaction, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteReader(transaction, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the specified OracleTransaction
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(trans, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //pass through to private overload, indicating that the connection is owned by the caller
+ return ExecuteReader(transaction.Connection, transaction, commandType, commandText, commandParameters, OracleConnectionOwnership.External);
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified
+ /// OracleTransaction using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(trans, "GetOrders", 24, 36);
+ ///
+ /// a valid OracleTransaction
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleTransaction transaction, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);
+
+ AssignParameterValues(commandParameters, parameterValues);
+
+ return ExecuteReader(transaction, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteReader(transaction, CommandType.StoredProcedure, spName);
+ }
+
+ #endregion ExecuteReader
+
+ #region ExecuteScalar
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset and takes no parameters) against the database specified in
+ /// the connection string.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(connString, CommandType.StoredProcedure, "GetOrderCount");
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(string connectionString, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteScalar(connectionString, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset) against the database specified in the connection string
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(connString, CommandType.StoredProcedure, "GetOrderCount", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create & open a OracleConnection, and dispose of it after we are done.
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ {
+ cn.Open();
+
+ //call the overload that takes a connection in place of the connection string
+ return ExecuteScalar(cn, commandType, commandText, commandParameters);
+ }
+ }
+
+ ///
+ /// Execute a stored procedure via a OracleCommand (that returns a 1x1 resultset) against the database specified in
+ /// the connection string using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(connString, "GetOrderCount", 24, 36);
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(string connectionString, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteScalar(connectionString, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteScalar(connectionString, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset and takes no parameters) against the provided OracleConnection.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(conn, CommandType.StoredProcedure, "GetOrderCount");
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleConnection connection, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteScalar(connection, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset) against the specified OracleConnection
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(conn, CommandType.StoredProcedure, "GetOrderCount", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, connection, null, commandType, commandText, commandParameters);
+
+ //execute the command & return the results
+ object retval = cmd.ExecuteScalar();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+
+ }
+
+ ///
+ /// Execute a stored procedure via a OracleCommand (that returns a 1x1 resultset) against the specified OracleConnection
+ /// using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(conn, "GetOrderCount", 24, 36);
+ ///
+ /// a valid OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleConnection connection, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteScalar(connection, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteScalar(connection, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset and takes no parameters) against the provided OracleTransaction.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(trans, CommandType.StoredProcedure, "GetOrderCount");
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleTransaction transaction, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteScalar(transaction, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset) against the specified OracleTransaction
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(trans, CommandType.StoredProcedure, "GetOrderCount", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);
+
+ //execute the command & return the results
+ object retval = cmd.ExecuteScalar();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+ }
+
+ ///
+ /// Execute a stored procedure via a OracleCommand (that returns a 1x1 resultset) against the specified
+ /// OracleTransaction using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(trans, "GetOrderCount", 24, 36);
+ ///
+ /// a valid OracleTransaction
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleTransaction transaction, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteScalar(transaction, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteScalar(transaction, CommandType.StoredProcedure, spName);
+ }
+
+ #endregion ExecuteScalar
+
+
+ }
+ ///
+ /// OracleHelperParameterCache provides functions to leverage a static cache of procedure parameters, and the
+ /// ability to discover parameters for stored procedures at run-time.
+ ///
+ ///
+
+ public sealed class OracleHelperParameterCache
+ {
+ #region private methods, variables, and constructors
+
+ //Since this class provides only static methods, make the default constructor private to prevent
+ //instances from being created with "new SqlHelperParameterCache()".
+ private OracleHelperParameterCache() { }
+
+ private static Hashtable paramCache = Hashtable.Synchronized(new Hashtable());
+
+ ///
+ /// resolve at run time the appropriate set of SqlParameters for a stored procedure
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// whether or not to include their return value parameter
+ ///
+ private static OracleParameter[] DiscoverSpParameterSet(string connectionString, string spName, bool includeReturnValueParameter)
+ {
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ using (OracleCommand cmd = new OracleCommand(spName, cn))
+ {
+ cn.Open();
+ cmd.CommandType = CommandType.StoredProcedure;
+ OracleCommandBuilder.DeriveParameters(cmd);
+
+ if (!includeReturnValueParameter)
+ {
+ cmd.Parameters.RemoveAt(0);
+ }
+
+ OracleParameter[] discoveredParameters = new OracleParameter[cmd.Parameters.Count]; ;
+
+ cmd.Parameters.CopyTo(discoveredParameters, 0);
+
+ return discoveredParameters;
+ }
+ }
+
+ //deep copy of cached OracleParameter array
+ private static OracleParameter[] CloneParameters(OracleParameter[] originalParameters)
+ {
+ OracleParameter[] clonedParameters = new OracleParameter[originalParameters.Length];
+
+ for (int i = 0, j = originalParameters.Length; i < j; i++)
+ {
+ clonedParameters[i] = (OracleParameter)((ICloneable)originalParameters[i]).Clone();
+ }
+
+ return clonedParameters;
+ }
+
+ #endregion private methods, variables, and constructors
+
+ #region caching functions
+
+ ///
+ /// add parameter array to the cache
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters to be cached
+ public static void CacheParameterSet(string connectionString, string commandText, params OracleParameter[] commandParameters)
+ {
+ string hashKey = connectionString + ":" + commandText;
+
+ paramCache[hashKey] = commandParameters;
+ }
+
+ ///
+ /// retrieve a parameter array from the cache
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters
+ public static OracleParameter[] GetCachedParameterSet(string connectionString, string commandText)
+ {
+ string hashKey = connectionString + ":" + commandText;
+
+ OracleParameter[] cachedParameters = (OracleParameter[])paramCache[hashKey];
+
+ if (cachedParameters == null)
+ {
+ return null;
+ }
+ return CloneParameters(cachedParameters);
+ }
+
+ #endregion caching functions
+
+ #region Parameter Discovery Functions
+
+ ///
+ /// Retrieves the set of SqlParameters appropriate for the stored procedure
+ ///
+ ///
+ /// This method will query the database for this information, and then store it in a cache for future requests.
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// an array of SqlParameters
+ public static OracleParameter[] GetSpParameterSet(string connectionString, string spName)
+ {
+ return GetSpParameterSet(connectionString, spName, false);
+ }
+
+ ///
+ /// Retrieves the set of SqlParameters appropriate for the stored procedure
+ ///
+ ///
+ /// This method will query the database for this information, and then store it in a cache for future requests.
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// a bool value indicating whether the return value parameter should be included in the results
+ /// an array of SqlParameters
+ public static OracleParameter[] GetSpParameterSet(string connectionString, string spName, bool includeReturnValueParameter)
+ {
+ string hashKey = connectionString + ":" + spName + (includeReturnValueParameter ? ":include ReturnValue Parameter" : "");
+
+ OracleParameter[] cachedParameters;
+
+ cachedParameters = (OracleParameter[])paramCache[hashKey];
+
+ if (cachedParameters == null)
+ {
+ cachedParameters = (OracleParameter[])(paramCache[hashKey] = DiscoverSpParameterSet(connectionString, spName, includeReturnValueParameter));
+ }
+
+ return CloneParameters(cachedParameters);
+ }
+
+ #endregion Parameter Discovery Functions
+ }
+}
diff --git a/Utility.cs b/Utility.cs
index 1429fd9..4e64d66 100644
--- a/Utility.cs
+++ b/Utility.cs
@@ -17,6 +17,11 @@
{
public class Utility
{
+ public static string DBServer;
+ public static string Database;
+ public static string UserID;
+ public static string DBPassword;
+
public static void SetBallons(GSOBalloon featureTooltip,GSOBalloonEx balloonEx)
{
featureTooltip.CacheFilePath = Path.GetDirectoryName(Application.ExecutablePath) + "/GeoScene/Globe/Temp";
diff --git a/bin/x64/Debug/LSPipeline.exe b/bin/x64/Debug/LSPipeline.exe
index 833a5e5..76f838b 100644
--- a/bin/x64/Debug/LSPipeline.exe
+++ b/bin/x64/Debug/LSPipeline.exe
Binary files differ
diff --git a/FrmDatabaseParaSettingOracle.cs b/FrmDatabaseParaSettingOracle.cs
index 18c5e99..6e97dfb 100644
--- a/FrmDatabaseParaSettingOracle.cs
+++ b/FrmDatabaseParaSettingOracle.cs
@@ -47,12 +47,15 @@
}
string serverIp = textBoxIP.Text.Trim();
+ /*
string hostName = System.Net.Dns.GetHostName();
if (serverIp == hostName || serverIp == "localhost"
|| serverIp == System.Net.Dns.GetHostAddresses(hostName).GetValue(2).ToString())
{
serverIp = "127.0.0.1";
}
+ * */
+
DateTime timeStart = DateTime.Now;
GSODataSource ds = globeControl1.Globe.DataManager.GetDataSourceByName(serverIp + "/" + textBoxDatabase.Text.Trim() + "_" + textBoxUser.Text.Trim());
if (ds == null)
@@ -83,7 +86,7 @@
connectParams.dataSourceName = ds.Name;
connectParams.databaseType = EnumDataSourceType.Oracle;
Utility.connectParamsOfDatabase.Add(connectParams);
-
+ setUtilityValue(connectParams);
WriteXML();
MessageBox.Show("连接Oracle数据库成功,用时:" + secondsConnectOracle.ToString() + "秒", "提示");
}
@@ -92,6 +95,14 @@
this.Close();
}
+ private void setUtilityValue(DatabaseConnectParams connectParams)
+ {
+ Utility.DBServer = connectParams.ip;
+ Utility.Database = connectParams.databaseName;
+ Utility.UserID = connectParams.userName;
+ Utility.DBPassword = connectParams.password;
+ }
+
private void ReadXML()
{
string strFileName = Path.GetDirectoryName(Application.ExecutablePath) + "/databaseConfigOracle.xml";
diff --git a/GXBuilder.cs b/GXBuilder.cs
new file mode 100644
index 0000000..b2ec9b2
--- /dev/null
+++ b/GXBuilder.cs
@@ -0,0 +1,187 @@
+using System;
+using System.Data;
+using System.Drawing;
+using System.Runtime.InteropServices;
+using GeoScene.Data;
+using GeoScene.Engine;
+using GeoScene.Globe;
+
+namespace WorldGIS
+{
+ public class GXBuilder : ModelBuilder
+ {
+ private static double diameter = 0.1;
+
+ public GXBuilder(GSODataSource ds)
+ : base(ds)
+ {
+
+ }
+
+ public override bool validate(GSOLayer layer)
+ {
+ return true;
+ }
+
+ ///
+ ///
+ ///
+ /// 追加或修改
+ /// 高程入库或埋深入库
+ ///
+ public override bool doBuild(EnumUpdateMode updateMode,
+ EnumBuildMode buildMode,
+ BaseParam param)
+ {
+ LineParam lineParam = param as LineParam;
+ GSOFeatureDataset newFeatureSet = ds.GetDatasetByName(lineParam.layerName) as GSOFeatureDataset;
+ if (newFeatureSet == null)
+ {
+ newFeatureSet = CreateDBFeatureDataset(layer, lineParam.layerName);
+ }
+ newFeatureSet.Open();
+ GSOFeatures features = layer.GetAllFeatures(true);
+ for (int i = 0; i < features.Length; i++)
+ {
+ GSOFeature f = features[i];
+ GSOGeoPolyline3D lineeee = f.Geometry as GSOGeoPolyline3D;
+ if (lineeee == null || lineeee.GetSpaceLength(true, 6378137) == 0)
+ {
+ LogHelper.Error("出现数据无法入库:" + f.ID);
+ continue;
+ }
+
+ GSOFeature newFeature = newFeatureSet.CreateFeature();
+
+ double radius = diameter; //创建光纤的半径
+ newFeature.Geometry = updateGemotry(f, lineParam, radius, buildMode);
+ newFeature.Geometry.Style = getPipeLineStyle(lineParam, f, radius);
+ newFeature.Name = f.GetFieldAsString(lineParam.uniqueIdFieldName);
+ setFeatureValueByShapeFeature(f, newFeature);
+ // newFeatureSet
+ if (newFeatureSet.GetFeatureByName(newFeature.Name, true).Length > 0)
+ {
+ if (!this.UpdateGXDevice(newFeatureSet.GetFeatureByName(newFeature.Name, true)[0],
+ newFeature))
+ {
+ LogHelper.Error("光纤设备更新失败:" + newFeature.Name+"\r\n");
+ }
+ continue;
+ }
+ newFeatureSet.AddFeature(newFeature);
+ if (!AddGXDevice(newFeature))
+ {
+ LogHelper.Error("光纤数据保存Alarm_Device失败:" + newFeature.Name+"\r\n");
+ }
+ }
+ newFeatureSet.Save();
+ newFeatureSet.Close();
+ return true;
+ }
+
+ private bool AddGXDevice(GSOFeature feature)
+ {
+ //保存数据到设备表
+ try
+ {
+ String deviceType = feature.GetValue("DEVICETYPE") == null
+ ? "" : feature.GetValue("DEVICETYPE").ToString();
+ String devCode = feature.GetValue("DEVICEID") == null
+ ? "" : feature.GetValue("DEVICEID").ToString();
+ String road = feature.GetValue("ROAD") == null
+ ? "" : feature.GetValue("ROAD").ToString();
+
+ //TODO LIST:
+ string sqlCount = "select dbid from alarm_device_type where" +
+ " typename = '" + deviceType + "'";
+ object dbid = OracleUtils.ExecuteScalar(OracleUtils.ConnectionString,
+ CommandType.Text, sqlCount);
+ if (dbid == null)
+ {
+ return false;
+ }
+ int deviceTypeId = int.Parse(dbid.ToString());
+ string sql = "Insert into alarm_device (DBID,ACTIVE,DEVCODE,DEVNAME,FACTORY," +
+ "INSTALLDATE,GAOCHENG,HEIGHT,LATITUDE,LONGTITUDE,DEVICETYPE_ID) " +
+ "values (SEQ_DEVICE_ID.NEXTVAL, 1, '" + devCode + "', '" + deviceType + devCode +
+ "', " + "'航天二院', " + "to_date('" + DateTime.Now.ToString() + "','yyyy/MM/dd hh24:mi::ss'), "
+ + "0, 0, 0, 0, " + deviceTypeId + ")";
+ OracleUtils.ExecuteNonQuery(OracleUtils.ConnectionString, CommandType.Text, sql);
+
+ }
+ catch (Exception e)
+ {
+ throw;
+ }
+ return true;
+ }
+
+ private bool UpdateGXDevice(GSOFeature feature, GSOFeature newFeature)
+ {
+ String deviceType = newFeature.GetValue("DEVICETYPE") == null
+ ? "" : newFeature.GetValue("DEVICETYPE").ToString();
+ String devCode = newFeature.GetValue("DEVICEID") == null
+ ? "" : newFeature.GetValue("DEVICEID").ToString();
+ String road = newFeature.GetValue("ROAD") == null
+ ? "" : newFeature.GetValue("ROAD").ToString();
+
+ feature.Geometry = newFeature.Geometry.Clone();
+ this.setFeatureValueByShapeFeature(newFeature,feature);
+ // feature.Dataset.Save();
+
+ string sqlCount = "select dbid from alarm_device_type where" +
+ " typename = '" + deviceType + "'";
+ object dbid = OracleUtils.ExecuteScalar(OracleUtils.ConnectionString,
+ CommandType.Text, sqlCount);
+ if (dbid == null)
+ {
+ return false;
+ }
+ int deviceTypeId = int.Parse(dbid.ToString());
+
+ string sql = "update alarm_device set FACTORY='" + road +
+ "', DEVICETYPE_ID='" + deviceTypeId +
+ "', DEVNAME='"+deviceType+devCode+"' "+
+ "where devcode='" + devCode + "'";
+ OracleUtils.ExecuteNonQuery(OracleUtils.ConnectionString, CommandType.Text, sql);
+ return true;
+ }
+
+ private GSOLineStyle3D getPipeLineStyle(LineParam lineParam, GSOFeature f, double radius)
+ {
+ GSOPipeLineStyle3D style0 = new GSOPipeLineStyle3D();
+ style0.LineColor = Color.FromArgb(lineParam.transparency, lineParam.lineColor);
+ style0.Slice = lineParam.sliceNum;
+ style0.CornerSliceAngle = lineParam.cornerSliceAngle;
+ style0.Radius = radius;
+ return style0;
+ }
+
+ private GSOGeometry updateGemotry(GSOFeature f, LineParam lineParam, double radius, EnumBuildMode buildMode)
+ {
+
+ f.Geometry.AltitudeMode = (buildMode.Equals(EnumBuildMode.Alititude)) ? EnumAltitudeMode.RelativeToGround : EnumAltitudeMode.Absolute;
+
+ GSOGeoPolyline3D line = f.Geometry as GSOGeoPolyline3D;
+ if (line == null)
+ {
+ return null; //log4net 记录错误处理
+ }
+
+ double deep1 = 0;
+ double deep2 = 0;
+
+ GSOPoint3ds pt3ds = new GSOPoint3ds();
+ for (int n = 0; n < line[0].Count; n++)
+ {
+ GSOPoint3d pt3d = line[0][n];
+ pt3d.Z = 0;
+
+ pt3ds.Add(pt3d);
+ }
+ line[0] = pt3ds;
+ return line;
+ }
+
+ }
+}
diff --git a/HTForms/FrmPipelineModelDataBase.cs b/HTForms/FrmPipelineModelDataBase.cs
index 84a2d7b..3076bdd 100644
--- a/HTForms/FrmPipelineModelDataBase.cs
+++ b/HTForms/FrmPipelineModelDataBase.cs
@@ -91,6 +91,7 @@
}
else
datasource = ds;
+
if (comboBoxExLayer.Text.Trim() == "")
{
MessageBox.Show("请选择一个图层文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
@@ -126,20 +127,12 @@
comboBoxExLayer.Text));
if (layer == null) return;
- FieldValidate fieldValidate = FieldValidateFactory.Create(ValidateConfig.LoadConfig(),
- getEnumValidateType());
-
- if (!fieldValidate.Validate(layer))
+ if (txtModelLayer.Text != "传感设备图层")
{
- DateTime dt=DateTime.Now;
- string logFilePath = Application.StartupPath + "\\log\\" + dt.Year + "\\" + dt.Year + dt.Month + "\\" + dt.Year +
- dt.Month + dt.Day + ".txt";
- MessageBox.Show("选择的数据不符合数据规范,详情见日志" + logFilePath, "提示");
- return;
+ if (!getValidateResult(layer))
+ return;
}
- ModelBuilder lineBuilder = new LineBuilder(datasource);
-
LineParam lineParam = new LineParam();
lineParam.layerName = txtModelLayer.Text;
lineParam.uniqueIdFieldName = cmbID.Text;
@@ -149,14 +142,17 @@
lineParam.diameterFieldName = cmbRadius.Text;
lineParam.relativeMode = (cmbReference.Text == "管顶") ? 0 : 1;
lineParam.lineColor = btnPipelineColor.BackColor;
- lineParam.transparency=Convert.ToByte(ComboboxRansparency.Value);
+ lineParam.transparency = Convert.ToByte(ComboboxRansparency.Value);
lineParam.cornerSliceAngle = Convert.ToDouble(textBoxCornerSliceAngle.Text);
- lineParam.sliceNum=Convert.ToInt32(txtSlice.Text);
+ lineParam.sliceNum = Convert.ToInt32(txtSlice.Text);
lineParam.channelWidth = comboBoxExWidth.Text;
lineParam.channelHeight = comboBoxExHeight.Text;
- lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update,
- checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam);
+ if (txtModelLayer.Text != "传感设备图层")
+ lineBuilder(layer, lineParam);
+ else
+ gxLineBuilder(layer, lineParam);
+
addLayerToGlobeControl(lineParam.layerName);
//this.DialogResult = DialogResult.OK;
MessageBox.Show("入库完成!", "提示");
@@ -167,6 +163,33 @@
}
}
+ bool getValidateResult(GSOLayer layer)
+ {
+ FieldValidate fieldValidate = FieldValidateFactory.Create(ValidateConfig.LoadConfig(),
+ getEnumValidateType());
+
+ if (fieldValidate.Validate(layer)) return true;
+ DateTime dt = DateTime.Now;
+ string logFilePath = Application.StartupPath + "\\log\\" + dt.Year + "\\" + dt.Year + dt.Month +
+ "\\" + dt.Year + dt.Month + dt.Day + ".txt";
+ MessageBox.Show("选择的数据不符合数据规范,详情见日志" + logFilePath, "提示");
+ return false;
+ }
+
+ void lineBuilder(GSOLayer layer,LineParam lineParam)
+ {
+ ModelBuilder lineBuilder = new LineBuilder(datasource);
+ lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update,
+ checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam);
+ }
+
+ void gxLineBuilder(GSOLayer layer, LineParam lineParam)
+ {
+ ModelBuilder lineBuilder = new GXBuilder(datasource);
+ lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update,
+ checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam);
+ }
+
private EnumValidateType getEnumValidateType()
{
if (comboBoxExWidth.Text != "")
diff --git a/LSPipeline.csproj b/LSPipeline.csproj
index 477d8ba..599b492 100644
--- a/LSPipeline.csproj
+++ b/LSPipeline.csproj
@@ -222,6 +222,7 @@
FrmUpdateLayerFieldValues.cs
+
Form
@@ -243,6 +244,7 @@
+
True
diff --git a/LSPipeline.suo b/LSPipeline.suo
index c930f27..92b5d7d 100644
--- a/LSPipeline.suo
+++ b/LSPipeline.suo
Binary files differ
diff --git a/OracleUtils.cs b/OracleUtils.cs
new file mode 100644
index 0000000..c79d316
--- /dev/null
+++ b/OracleUtils.cs
@@ -0,0 +1,1271 @@
+using System;
+using System.Collections;
+using System.Data;
+using System.Data.OracleClient;
+
+namespace WorldGIS
+{
+ public abstract class OracleUtils
+ {
+ // Read the connection strings from the configuration file
+ //public static readonly string ConnectionString = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
+ public static readonly string ConnectionString = @"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=" + Utility.DBServer
+ + ")(PORT=1521))(CONNECT_DATA=(SID=" + Utility.Database
+ + ")));Persist Security Info=True;User Id=" + Utility.UserID
+ + "; Password=" + Utility.DBPassword + "";
+
+ //Create a hashtable for the parameter cached
+ private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());
+
+ #region private utility methods & constructors
+
+ //Since this class provides only static methods, make the default constructor private to prevent
+ //instances from being created with "new SqlHelper()".
+ private OracleUtils() { }
+
+ ///
+ /// This method is used to attach array of SqlParameters to a SqlCommand.
+ ///
+ /// This method will assign a value of DbNull to any parameter with a direction of
+ /// InputOutput and a value of null.
+ ///
+ /// This behavior will prevent default values from being used, but
+ /// this will be the less common case than an intended pure output parameter (derived as InputOutput)
+ /// where the user provided no input value.
+ ///
+ /// The command to which the parameters will be added
+ /// an array of SqlParameters tho be added to command
+ private static void AttachParameters(OracleCommand command, OracleParameter[] commandParameters)
+ {
+ foreach (OracleParameter p in commandParameters)
+ {
+ //check for derived output value with no value assigned
+ if ((p.Direction == ParameterDirection.InputOutput) && (p.Value == null))
+ {
+ p.Value = DBNull.Value;
+ }
+
+ command.Parameters.Add(p);
+ }
+ }
+
+ ///
+ /// This method assigns an array of values to an array of SqlParameters.
+ ///
+ /// array of SqlParameters to be assigned values
+ /// array of objects holding the values to be assigned
+ private static void AssignParameterValues(OracleParameter[] commandParameters, object[] parameterValues)
+ {
+ if ((commandParameters == null) || (parameterValues == null))
+ {
+ //do nothing if we get no data
+ return;
+ }
+
+ // we must have the same number of values as we pave parameters to put them in
+ if (commandParameters.Length != parameterValues.Length)
+ {
+ throw new ArgumentException("Parameter count does not match Parameter Value count.");
+ }
+
+ //iterate through the SqlParameters, assigning the values from the corresponding position in the
+ //value array
+ for (int i = 0, j = commandParameters.Length; i < j; i++)
+ {
+ commandParameters[i].Value = parameterValues[i];
+ }
+ }
+
+ ///
+ /// This method opens (if necessary) and assigns a connection, transaction, command type and parameters
+ /// to the provided command.
+ ///
+ /// the SqlCommand to be prepared
+ /// a valid OracleConnection, on which to execute this command
+ /// a valid OracleTransaction, or 'null'
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParameters to be associated with the command or 'null' if no parameters are required
+ private static void PrepareCommand(OracleCommand command, OracleConnection connection, OracleTransaction transaction, CommandType commandType, string commandText, OracleParameter[] commandParameters)
+ {
+ //if the provided connection is not open, we will open it
+ if (connection.State != ConnectionState.Open)
+ {
+ connection.Open();
+ }
+
+ //associate the connection with the command
+ command.Connection = connection;
+
+ //set the command text (stored procedure name or SQL statement)
+ command.CommandText = commandText;
+
+ //if we were provided a transaction, assign it.
+ if (transaction != null)
+ {
+ command.Transaction = transaction;
+ }
+
+ //set the command type
+ command.CommandType = commandType;
+
+ //attach the command parameters if they are provided
+ if (commandParameters != null)
+ {
+ AttachParameters(command, commandParameters);
+ }
+ }
+
+
+ #endregion private utility methods & constructors
+
+ #region ExecuteNonQuery
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset and takes no parameters) against the database specified in
+ /// the connection string.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders");
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteNonQuery(connectionString, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset) against the database specified in the connection string
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create & open a OracleConnection, and dispose of it after we are done.
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ {
+ cn.Open();
+
+ //call the overload that takes a connection in place of the connection string
+ return ExecuteNonQuery(cn, commandType, commandText, commandParameters);
+ }
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns no resultset) against the database specified in
+ /// the connection string using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(connString, "PublishOrders", 24, 36);
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored prcedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(string connectionString, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset and takes no parameters) against the provided OracleConnection.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(conn, CommandType.StoredProcedure, "PublishOrders");
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleConnection connection, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteNonQuery(connection, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset) against the specified OracleConnection
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(conn, CommandType.StoredProcedure, "PublishOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, connection, null, commandType, commandText, commandParameters);
+
+ //finally, execute the command.
+ int retval = cmd.ExecuteNonQuery();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+ }
+
+ public static int ExecuteNonQueryWithTimeout(string connectionString, CommandType commandType, string commandText, int cmdTimeout)
+ {
+ //create a command and prepare it for execution
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ {
+ cn.Open();
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, cn, null, commandType, commandText, null);
+ cmd.CommandTimeout = cmdTimeout;
+ //finally, execute the command.
+ int retval = cmd.ExecuteNonQuery();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+ }
+
+ }
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns no resultset) against the specified OracleConnection
+ /// using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(conn, "PublishOrders", 24, 36);
+ ///
+ /// a valid OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleConnection connection, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteNonQuery(connection, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteNonQuery(connection, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset and takes no parameters) against the provided OracleTransaction.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "PublishOrders");
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleTransaction transaction, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteNonQuery(transaction, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset) against the specified OracleTransaction
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);
+
+ //finally, execute the command.
+ int retval = cmd.ExecuteNonQuery();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns no resultset) against the specified
+ /// OracleTransaction using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(conn, trans, "PublishOrders", 24, 36);
+ ///
+ /// a valid OracleTransaction
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleTransaction transaction, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName);
+ }
+
+
+ #endregion ExecuteNonQuery
+
+ #region ExecuteDataSet
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the database specified in
+ /// the connection string.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(connString, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(string connectionString, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteDataset(connectionString, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the database specified in the connection string
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(connString, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create & open a OracleConnection, and dispose of it after we are done.
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ {
+ cn.Open();
+
+ //call the overload that takes a connection in place of the connection string
+ return ExecuteDataset(cn, commandType, commandText, commandParameters);
+ }
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the database specified in
+ /// the connection string using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(connString, "GetOrders", 24, 36);
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(string connectionString, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteDataset(connectionString, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteDataset(connectionString, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided OracleConnection.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(conn, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleConnection connection, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteDataset(connection, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the specified OracleConnection
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(conn, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, connection, null, commandType, commandText, commandParameters);
+
+ //create the DataAdapter & DataSet
+ OracleDataAdapter da = new OracleDataAdapter(cmd);
+ DataSet ds = new DataSet();
+
+ //fill the DataSet using default values for DataTable names, etc.
+ da.Fill(ds);
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+
+ //return the dataset
+ return ds;
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified OracleConnection
+ /// using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(conn, "GetOrders", 24, 36);
+ ///
+ /// a valid OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleConnection connection, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteDataset(connection, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteDataset(connection, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided OracleTransaction.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(trans, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleTransaction transaction, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteDataset(transaction, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the specified OracleTransaction
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(trans, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);
+
+ //create the DataAdapter & DataSet
+ OracleDataAdapter da = new OracleDataAdapter(cmd);
+ DataSet ds = new DataSet();
+
+ //fill the DataSet using default values for DataTable names, etc.
+ da.Fill(ds);
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+
+ //return the dataset
+ return ds;
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified
+ /// OracleTransaction using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(trans, "GetOrders", 24, 36);
+ ///
+ /// a valid OracleTransaction
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleTransaction transaction, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteDataset(transaction, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteDataset(transaction, CommandType.StoredProcedure, spName);
+ }
+
+ #endregion ExecuteDataSet
+
+ #region ExecuteReader
+
+ ///
+ /// this enum is used to indicate whether the connection was provided by the caller, or created by SqlHelper, so that
+ /// we can set the appropriate CommandBehavior when calling ExecuteReader()
+ ///
+ private enum OracleConnectionOwnership
+ {
+ /// Connection is owned and managed by SqlHelper
+ Internal,
+ /// Connection is owned and managed by the caller
+ External
+ }
+
+ ///
+ /// Create and prepare a SqlCommand, and call ExecuteReader with the appropriate CommandBehavior.
+ ///
+ ///
+ /// If we created and opened the connection, we want the connection to be closed when the DataReader is closed.
+ ///
+ /// If the caller provided the connection, we want to leave it to them to manage.
+ ///
+ /// a valid OracleConnection, on which to execute this command
+ /// a valid OracleTransaction, or 'null'
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParameters to be associated with the command or 'null' if no parameters are required
+ /// indicates whether the connection parameter was provided by the caller, or created by SqlHelper
+ /// SqlDataReader containing the results of the command
+ private static OracleDataReader ExecuteReader(OracleConnection connection, OracleTransaction transaction, CommandType commandType, string commandText, OracleParameter[] commandParameters, OracleConnectionOwnership connectionOwnership)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, connection, transaction, commandType, commandText, commandParameters);
+
+ //create a reader
+ OracleDataReader dr;
+
+ // call ExecuteReader with the appropriate CommandBehavior
+ if (connectionOwnership == OracleConnectionOwnership.External)
+ {
+ dr = cmd.ExecuteReader();
+ }
+ else
+ {
+ dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
+
+ }
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+
+ return dr;
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the database specified in
+ /// the connection string.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(connString, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(string connectionString, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteReader(connectionString, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the database specified in the connection string
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(connString, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create & open a OracleConnection
+ OracleConnection cn = new OracleConnection(connectionString);
+ cn.Open();
+
+ try
+ {
+ //call the private overload that takes an internally owned connection in place of the connection string
+ return ExecuteReader(cn, null, commandType, commandText, commandParameters, OracleConnectionOwnership.Internal);
+ }
+ catch
+ {
+ //if we fail to return the SqlDatReader, we need to close the connection ourselves
+ cn.Close();
+ throw;
+ }
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the database specified in
+ /// the connection string using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(connString, "GetOrders", 24, 36);
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(string connectionString, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteReader(connectionString, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteReader(connectionString, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided OracleConnection.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(conn, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleConnection connection, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteReader(connection, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the specified OracleConnection
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(conn, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //pass through the call to the private overload using a null transaction value and an externally owned connection
+ return ExecuteReader(connection, null, commandType, commandText, commandParameters, OracleConnectionOwnership.External);
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified OracleConnection
+ /// using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(conn, "GetOrders", 24, 36);
+ ///
+ /// a valid OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleConnection connection, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);
+
+ AssignParameterValues(commandParameters, parameterValues);
+
+ return ExecuteReader(connection, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteReader(connection, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided OracleTransaction.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(trans, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleTransaction transaction, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteReader(transaction, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the specified OracleTransaction
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(trans, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //pass through to private overload, indicating that the connection is owned by the caller
+ return ExecuteReader(transaction.Connection, transaction, commandType, commandText, commandParameters, OracleConnectionOwnership.External);
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified
+ /// OracleTransaction using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(trans, "GetOrders", 24, 36);
+ ///
+ /// a valid OracleTransaction
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleTransaction transaction, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);
+
+ AssignParameterValues(commandParameters, parameterValues);
+
+ return ExecuteReader(transaction, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteReader(transaction, CommandType.StoredProcedure, spName);
+ }
+
+ #endregion ExecuteReader
+
+ #region ExecuteScalar
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset and takes no parameters) against the database specified in
+ /// the connection string.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(connString, CommandType.StoredProcedure, "GetOrderCount");
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(string connectionString, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteScalar(connectionString, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset) against the database specified in the connection string
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(connString, CommandType.StoredProcedure, "GetOrderCount", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create & open a OracleConnection, and dispose of it after we are done.
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ {
+ cn.Open();
+
+ //call the overload that takes a connection in place of the connection string
+ return ExecuteScalar(cn, commandType, commandText, commandParameters);
+ }
+ }
+
+ ///
+ /// Execute a stored procedure via a OracleCommand (that returns a 1x1 resultset) against the database specified in
+ /// the connection string using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(connString, "GetOrderCount", 24, 36);
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(string connectionString, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteScalar(connectionString, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteScalar(connectionString, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset and takes no parameters) against the provided OracleConnection.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(conn, CommandType.StoredProcedure, "GetOrderCount");
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleConnection connection, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteScalar(connection, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset) against the specified OracleConnection
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(conn, CommandType.StoredProcedure, "GetOrderCount", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, connection, null, commandType, commandText, commandParameters);
+
+ //execute the command & return the results
+ object retval = cmd.ExecuteScalar();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+
+ }
+
+ ///
+ /// Execute a stored procedure via a OracleCommand (that returns a 1x1 resultset) against the specified OracleConnection
+ /// using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(conn, "GetOrderCount", 24, 36);
+ ///
+ /// a valid OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleConnection connection, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteScalar(connection, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteScalar(connection, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset and takes no parameters) against the provided OracleTransaction.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(trans, CommandType.StoredProcedure, "GetOrderCount");
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleTransaction transaction, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteScalar(transaction, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset) against the specified OracleTransaction
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(trans, CommandType.StoredProcedure, "GetOrderCount", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);
+
+ //execute the command & return the results
+ object retval = cmd.ExecuteScalar();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+ }
+
+ ///
+ /// Execute a stored procedure via a OracleCommand (that returns a 1x1 resultset) against the specified
+ /// OracleTransaction using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(trans, "GetOrderCount", 24, 36);
+ ///
+ /// a valid OracleTransaction
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleTransaction transaction, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteScalar(transaction, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteScalar(transaction, CommandType.StoredProcedure, spName);
+ }
+
+ #endregion ExecuteScalar
+
+
+ }
+ ///
+ /// OracleHelperParameterCache provides functions to leverage a static cache of procedure parameters, and the
+ /// ability to discover parameters for stored procedures at run-time.
+ ///
+ ///
+
+ public sealed class OracleHelperParameterCache
+ {
+ #region private methods, variables, and constructors
+
+ //Since this class provides only static methods, make the default constructor private to prevent
+ //instances from being created with "new SqlHelperParameterCache()".
+ private OracleHelperParameterCache() { }
+
+ private static Hashtable paramCache = Hashtable.Synchronized(new Hashtable());
+
+ ///
+ /// resolve at run time the appropriate set of SqlParameters for a stored procedure
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// whether or not to include their return value parameter
+ ///
+ private static OracleParameter[] DiscoverSpParameterSet(string connectionString, string spName, bool includeReturnValueParameter)
+ {
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ using (OracleCommand cmd = new OracleCommand(spName, cn))
+ {
+ cn.Open();
+ cmd.CommandType = CommandType.StoredProcedure;
+ OracleCommandBuilder.DeriveParameters(cmd);
+
+ if (!includeReturnValueParameter)
+ {
+ cmd.Parameters.RemoveAt(0);
+ }
+
+ OracleParameter[] discoveredParameters = new OracleParameter[cmd.Parameters.Count]; ;
+
+ cmd.Parameters.CopyTo(discoveredParameters, 0);
+
+ return discoveredParameters;
+ }
+ }
+
+ //deep copy of cached OracleParameter array
+ private static OracleParameter[] CloneParameters(OracleParameter[] originalParameters)
+ {
+ OracleParameter[] clonedParameters = new OracleParameter[originalParameters.Length];
+
+ for (int i = 0, j = originalParameters.Length; i < j; i++)
+ {
+ clonedParameters[i] = (OracleParameter)((ICloneable)originalParameters[i]).Clone();
+ }
+
+ return clonedParameters;
+ }
+
+ #endregion private methods, variables, and constructors
+
+ #region caching functions
+
+ ///
+ /// add parameter array to the cache
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters to be cached
+ public static void CacheParameterSet(string connectionString, string commandText, params OracleParameter[] commandParameters)
+ {
+ string hashKey = connectionString + ":" + commandText;
+
+ paramCache[hashKey] = commandParameters;
+ }
+
+ ///
+ /// retrieve a parameter array from the cache
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters
+ public static OracleParameter[] GetCachedParameterSet(string connectionString, string commandText)
+ {
+ string hashKey = connectionString + ":" + commandText;
+
+ OracleParameter[] cachedParameters = (OracleParameter[])paramCache[hashKey];
+
+ if (cachedParameters == null)
+ {
+ return null;
+ }
+ return CloneParameters(cachedParameters);
+ }
+
+ #endregion caching functions
+
+ #region Parameter Discovery Functions
+
+ ///
+ /// Retrieves the set of SqlParameters appropriate for the stored procedure
+ ///
+ ///
+ /// This method will query the database for this information, and then store it in a cache for future requests.
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// an array of SqlParameters
+ public static OracleParameter[] GetSpParameterSet(string connectionString, string spName)
+ {
+ return GetSpParameterSet(connectionString, spName, false);
+ }
+
+ ///
+ /// Retrieves the set of SqlParameters appropriate for the stored procedure
+ ///
+ ///
+ /// This method will query the database for this information, and then store it in a cache for future requests.
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// a bool value indicating whether the return value parameter should be included in the results
+ /// an array of SqlParameters
+ public static OracleParameter[] GetSpParameterSet(string connectionString, string spName, bool includeReturnValueParameter)
+ {
+ string hashKey = connectionString + ":" + spName + (includeReturnValueParameter ? ":include ReturnValue Parameter" : "");
+
+ OracleParameter[] cachedParameters;
+
+ cachedParameters = (OracleParameter[])paramCache[hashKey];
+
+ if (cachedParameters == null)
+ {
+ cachedParameters = (OracleParameter[])(paramCache[hashKey] = DiscoverSpParameterSet(connectionString, spName, includeReturnValueParameter));
+ }
+
+ return CloneParameters(cachedParameters);
+ }
+
+ #endregion Parameter Discovery Functions
+ }
+}
diff --git a/Utility.cs b/Utility.cs
index 1429fd9..4e64d66 100644
--- a/Utility.cs
+++ b/Utility.cs
@@ -17,6 +17,11 @@
{
public class Utility
{
+ public static string DBServer;
+ public static string Database;
+ public static string UserID;
+ public static string DBPassword;
+
public static void SetBallons(GSOBalloon featureTooltip,GSOBalloonEx balloonEx)
{
featureTooltip.CacheFilePath = Path.GetDirectoryName(Application.ExecutablePath) + "/GeoScene/Globe/Temp";
diff --git a/bin/x64/Debug/LSPipeline.exe b/bin/x64/Debug/LSPipeline.exe
index 833a5e5..76f838b 100644
--- a/bin/x64/Debug/LSPipeline.exe
+++ b/bin/x64/Debug/LSPipeline.exe
Binary files differ
diff --git a/bin/x64/Debug/LSPipeline.pdb b/bin/x64/Debug/LSPipeline.pdb
index 245e727..28c81dc 100644
--- a/bin/x64/Debug/LSPipeline.pdb
+++ b/bin/x64/Debug/LSPipeline.pdb
Binary files differ
diff --git a/FrmDatabaseParaSettingOracle.cs b/FrmDatabaseParaSettingOracle.cs
index 18c5e99..6e97dfb 100644
--- a/FrmDatabaseParaSettingOracle.cs
+++ b/FrmDatabaseParaSettingOracle.cs
@@ -47,12 +47,15 @@
}
string serverIp = textBoxIP.Text.Trim();
+ /*
string hostName = System.Net.Dns.GetHostName();
if (serverIp == hostName || serverIp == "localhost"
|| serverIp == System.Net.Dns.GetHostAddresses(hostName).GetValue(2).ToString())
{
serverIp = "127.0.0.1";
}
+ * */
+
DateTime timeStart = DateTime.Now;
GSODataSource ds = globeControl1.Globe.DataManager.GetDataSourceByName(serverIp + "/" + textBoxDatabase.Text.Trim() + "_" + textBoxUser.Text.Trim());
if (ds == null)
@@ -83,7 +86,7 @@
connectParams.dataSourceName = ds.Name;
connectParams.databaseType = EnumDataSourceType.Oracle;
Utility.connectParamsOfDatabase.Add(connectParams);
-
+ setUtilityValue(connectParams);
WriteXML();
MessageBox.Show("连接Oracle数据库成功,用时:" + secondsConnectOracle.ToString() + "秒", "提示");
}
@@ -92,6 +95,14 @@
this.Close();
}
+ private void setUtilityValue(DatabaseConnectParams connectParams)
+ {
+ Utility.DBServer = connectParams.ip;
+ Utility.Database = connectParams.databaseName;
+ Utility.UserID = connectParams.userName;
+ Utility.DBPassword = connectParams.password;
+ }
+
private void ReadXML()
{
string strFileName = Path.GetDirectoryName(Application.ExecutablePath) + "/databaseConfigOracle.xml";
diff --git a/GXBuilder.cs b/GXBuilder.cs
new file mode 100644
index 0000000..b2ec9b2
--- /dev/null
+++ b/GXBuilder.cs
@@ -0,0 +1,187 @@
+using System;
+using System.Data;
+using System.Drawing;
+using System.Runtime.InteropServices;
+using GeoScene.Data;
+using GeoScene.Engine;
+using GeoScene.Globe;
+
+namespace WorldGIS
+{
+ public class GXBuilder : ModelBuilder
+ {
+ private static double diameter = 0.1;
+
+ public GXBuilder(GSODataSource ds)
+ : base(ds)
+ {
+
+ }
+
+ public override bool validate(GSOLayer layer)
+ {
+ return true;
+ }
+
+ ///
+ ///
+ ///
+ /// 追加或修改
+ /// 高程入库或埋深入库
+ ///
+ public override bool doBuild(EnumUpdateMode updateMode,
+ EnumBuildMode buildMode,
+ BaseParam param)
+ {
+ LineParam lineParam = param as LineParam;
+ GSOFeatureDataset newFeatureSet = ds.GetDatasetByName(lineParam.layerName) as GSOFeatureDataset;
+ if (newFeatureSet == null)
+ {
+ newFeatureSet = CreateDBFeatureDataset(layer, lineParam.layerName);
+ }
+ newFeatureSet.Open();
+ GSOFeatures features = layer.GetAllFeatures(true);
+ for (int i = 0; i < features.Length; i++)
+ {
+ GSOFeature f = features[i];
+ GSOGeoPolyline3D lineeee = f.Geometry as GSOGeoPolyline3D;
+ if (lineeee == null || lineeee.GetSpaceLength(true, 6378137) == 0)
+ {
+ LogHelper.Error("出现数据无法入库:" + f.ID);
+ continue;
+ }
+
+ GSOFeature newFeature = newFeatureSet.CreateFeature();
+
+ double radius = diameter; //创建光纤的半径
+ newFeature.Geometry = updateGemotry(f, lineParam, radius, buildMode);
+ newFeature.Geometry.Style = getPipeLineStyle(lineParam, f, radius);
+ newFeature.Name = f.GetFieldAsString(lineParam.uniqueIdFieldName);
+ setFeatureValueByShapeFeature(f, newFeature);
+ // newFeatureSet
+ if (newFeatureSet.GetFeatureByName(newFeature.Name, true).Length > 0)
+ {
+ if (!this.UpdateGXDevice(newFeatureSet.GetFeatureByName(newFeature.Name, true)[0],
+ newFeature))
+ {
+ LogHelper.Error("光纤设备更新失败:" + newFeature.Name+"\r\n");
+ }
+ continue;
+ }
+ newFeatureSet.AddFeature(newFeature);
+ if (!AddGXDevice(newFeature))
+ {
+ LogHelper.Error("光纤数据保存Alarm_Device失败:" + newFeature.Name+"\r\n");
+ }
+ }
+ newFeatureSet.Save();
+ newFeatureSet.Close();
+ return true;
+ }
+
+ private bool AddGXDevice(GSOFeature feature)
+ {
+ //保存数据到设备表
+ try
+ {
+ String deviceType = feature.GetValue("DEVICETYPE") == null
+ ? "" : feature.GetValue("DEVICETYPE").ToString();
+ String devCode = feature.GetValue("DEVICEID") == null
+ ? "" : feature.GetValue("DEVICEID").ToString();
+ String road = feature.GetValue("ROAD") == null
+ ? "" : feature.GetValue("ROAD").ToString();
+
+ //TODO LIST:
+ string sqlCount = "select dbid from alarm_device_type where" +
+ " typename = '" + deviceType + "'";
+ object dbid = OracleUtils.ExecuteScalar(OracleUtils.ConnectionString,
+ CommandType.Text, sqlCount);
+ if (dbid == null)
+ {
+ return false;
+ }
+ int deviceTypeId = int.Parse(dbid.ToString());
+ string sql = "Insert into alarm_device (DBID,ACTIVE,DEVCODE,DEVNAME,FACTORY," +
+ "INSTALLDATE,GAOCHENG,HEIGHT,LATITUDE,LONGTITUDE,DEVICETYPE_ID) " +
+ "values (SEQ_DEVICE_ID.NEXTVAL, 1, '" + devCode + "', '" + deviceType + devCode +
+ "', " + "'航天二院', " + "to_date('" + DateTime.Now.ToString() + "','yyyy/MM/dd hh24:mi::ss'), "
+ + "0, 0, 0, 0, " + deviceTypeId + ")";
+ OracleUtils.ExecuteNonQuery(OracleUtils.ConnectionString, CommandType.Text, sql);
+
+ }
+ catch (Exception e)
+ {
+ throw;
+ }
+ return true;
+ }
+
+ private bool UpdateGXDevice(GSOFeature feature, GSOFeature newFeature)
+ {
+ String deviceType = newFeature.GetValue("DEVICETYPE") == null
+ ? "" : newFeature.GetValue("DEVICETYPE").ToString();
+ String devCode = newFeature.GetValue("DEVICEID") == null
+ ? "" : newFeature.GetValue("DEVICEID").ToString();
+ String road = newFeature.GetValue("ROAD") == null
+ ? "" : newFeature.GetValue("ROAD").ToString();
+
+ feature.Geometry = newFeature.Geometry.Clone();
+ this.setFeatureValueByShapeFeature(newFeature,feature);
+ // feature.Dataset.Save();
+
+ string sqlCount = "select dbid from alarm_device_type where" +
+ " typename = '" + deviceType + "'";
+ object dbid = OracleUtils.ExecuteScalar(OracleUtils.ConnectionString,
+ CommandType.Text, sqlCount);
+ if (dbid == null)
+ {
+ return false;
+ }
+ int deviceTypeId = int.Parse(dbid.ToString());
+
+ string sql = "update alarm_device set FACTORY='" + road +
+ "', DEVICETYPE_ID='" + deviceTypeId +
+ "', DEVNAME='"+deviceType+devCode+"' "+
+ "where devcode='" + devCode + "'";
+ OracleUtils.ExecuteNonQuery(OracleUtils.ConnectionString, CommandType.Text, sql);
+ return true;
+ }
+
+ private GSOLineStyle3D getPipeLineStyle(LineParam lineParam, GSOFeature f, double radius)
+ {
+ GSOPipeLineStyle3D style0 = new GSOPipeLineStyle3D();
+ style0.LineColor = Color.FromArgb(lineParam.transparency, lineParam.lineColor);
+ style0.Slice = lineParam.sliceNum;
+ style0.CornerSliceAngle = lineParam.cornerSliceAngle;
+ style0.Radius = radius;
+ return style0;
+ }
+
+ private GSOGeometry updateGemotry(GSOFeature f, LineParam lineParam, double radius, EnumBuildMode buildMode)
+ {
+
+ f.Geometry.AltitudeMode = (buildMode.Equals(EnumBuildMode.Alititude)) ? EnumAltitudeMode.RelativeToGround : EnumAltitudeMode.Absolute;
+
+ GSOGeoPolyline3D line = f.Geometry as GSOGeoPolyline3D;
+ if (line == null)
+ {
+ return null; //log4net 记录错误处理
+ }
+
+ double deep1 = 0;
+ double deep2 = 0;
+
+ GSOPoint3ds pt3ds = new GSOPoint3ds();
+ for (int n = 0; n < line[0].Count; n++)
+ {
+ GSOPoint3d pt3d = line[0][n];
+ pt3d.Z = 0;
+
+ pt3ds.Add(pt3d);
+ }
+ line[0] = pt3ds;
+ return line;
+ }
+
+ }
+}
diff --git a/HTForms/FrmPipelineModelDataBase.cs b/HTForms/FrmPipelineModelDataBase.cs
index 84a2d7b..3076bdd 100644
--- a/HTForms/FrmPipelineModelDataBase.cs
+++ b/HTForms/FrmPipelineModelDataBase.cs
@@ -91,6 +91,7 @@
}
else
datasource = ds;
+
if (comboBoxExLayer.Text.Trim() == "")
{
MessageBox.Show("请选择一个图层文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
@@ -126,20 +127,12 @@
comboBoxExLayer.Text));
if (layer == null) return;
- FieldValidate fieldValidate = FieldValidateFactory.Create(ValidateConfig.LoadConfig(),
- getEnumValidateType());
-
- if (!fieldValidate.Validate(layer))
+ if (txtModelLayer.Text != "传感设备图层")
{
- DateTime dt=DateTime.Now;
- string logFilePath = Application.StartupPath + "\\log\\" + dt.Year + "\\" + dt.Year + dt.Month + "\\" + dt.Year +
- dt.Month + dt.Day + ".txt";
- MessageBox.Show("选择的数据不符合数据规范,详情见日志" + logFilePath, "提示");
- return;
+ if (!getValidateResult(layer))
+ return;
}
- ModelBuilder lineBuilder = new LineBuilder(datasource);
-
LineParam lineParam = new LineParam();
lineParam.layerName = txtModelLayer.Text;
lineParam.uniqueIdFieldName = cmbID.Text;
@@ -149,14 +142,17 @@
lineParam.diameterFieldName = cmbRadius.Text;
lineParam.relativeMode = (cmbReference.Text == "管顶") ? 0 : 1;
lineParam.lineColor = btnPipelineColor.BackColor;
- lineParam.transparency=Convert.ToByte(ComboboxRansparency.Value);
+ lineParam.transparency = Convert.ToByte(ComboboxRansparency.Value);
lineParam.cornerSliceAngle = Convert.ToDouble(textBoxCornerSliceAngle.Text);
- lineParam.sliceNum=Convert.ToInt32(txtSlice.Text);
+ lineParam.sliceNum = Convert.ToInt32(txtSlice.Text);
lineParam.channelWidth = comboBoxExWidth.Text;
lineParam.channelHeight = comboBoxExHeight.Text;
- lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update,
- checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam);
+ if (txtModelLayer.Text != "传感设备图层")
+ lineBuilder(layer, lineParam);
+ else
+ gxLineBuilder(layer, lineParam);
+
addLayerToGlobeControl(lineParam.layerName);
//this.DialogResult = DialogResult.OK;
MessageBox.Show("入库完成!", "提示");
@@ -167,6 +163,33 @@
}
}
+ bool getValidateResult(GSOLayer layer)
+ {
+ FieldValidate fieldValidate = FieldValidateFactory.Create(ValidateConfig.LoadConfig(),
+ getEnumValidateType());
+
+ if (fieldValidate.Validate(layer)) return true;
+ DateTime dt = DateTime.Now;
+ string logFilePath = Application.StartupPath + "\\log\\" + dt.Year + "\\" + dt.Year + dt.Month +
+ "\\" + dt.Year + dt.Month + dt.Day + ".txt";
+ MessageBox.Show("选择的数据不符合数据规范,详情见日志" + logFilePath, "提示");
+ return false;
+ }
+
+ void lineBuilder(GSOLayer layer,LineParam lineParam)
+ {
+ ModelBuilder lineBuilder = new LineBuilder(datasource);
+ lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update,
+ checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam);
+ }
+
+ void gxLineBuilder(GSOLayer layer, LineParam lineParam)
+ {
+ ModelBuilder lineBuilder = new GXBuilder(datasource);
+ lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update,
+ checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam);
+ }
+
private EnumValidateType getEnumValidateType()
{
if (comboBoxExWidth.Text != "")
diff --git a/LSPipeline.csproj b/LSPipeline.csproj
index 477d8ba..599b492 100644
--- a/LSPipeline.csproj
+++ b/LSPipeline.csproj
@@ -222,6 +222,7 @@
FrmUpdateLayerFieldValues.cs
+
Form
@@ -243,6 +244,7 @@
+
True
diff --git a/LSPipeline.suo b/LSPipeline.suo
index c930f27..92b5d7d 100644
--- a/LSPipeline.suo
+++ b/LSPipeline.suo
Binary files differ
diff --git a/OracleUtils.cs b/OracleUtils.cs
new file mode 100644
index 0000000..c79d316
--- /dev/null
+++ b/OracleUtils.cs
@@ -0,0 +1,1271 @@
+using System;
+using System.Collections;
+using System.Data;
+using System.Data.OracleClient;
+
+namespace WorldGIS
+{
+ public abstract class OracleUtils
+ {
+ // Read the connection strings from the configuration file
+ //public static readonly string ConnectionString = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
+ public static readonly string ConnectionString = @"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=" + Utility.DBServer
+ + ")(PORT=1521))(CONNECT_DATA=(SID=" + Utility.Database
+ + ")));Persist Security Info=True;User Id=" + Utility.UserID
+ + "; Password=" + Utility.DBPassword + "";
+
+ //Create a hashtable for the parameter cached
+ private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());
+
+ #region private utility methods & constructors
+
+ //Since this class provides only static methods, make the default constructor private to prevent
+ //instances from being created with "new SqlHelper()".
+ private OracleUtils() { }
+
+ ///
+ /// This method is used to attach array of SqlParameters to a SqlCommand.
+ ///
+ /// This method will assign a value of DbNull to any parameter with a direction of
+ /// InputOutput and a value of null.
+ ///
+ /// This behavior will prevent default values from being used, but
+ /// this will be the less common case than an intended pure output parameter (derived as InputOutput)
+ /// where the user provided no input value.
+ ///
+ /// The command to which the parameters will be added
+ /// an array of SqlParameters tho be added to command
+ private static void AttachParameters(OracleCommand command, OracleParameter[] commandParameters)
+ {
+ foreach (OracleParameter p in commandParameters)
+ {
+ //check for derived output value with no value assigned
+ if ((p.Direction == ParameterDirection.InputOutput) && (p.Value == null))
+ {
+ p.Value = DBNull.Value;
+ }
+
+ command.Parameters.Add(p);
+ }
+ }
+
+ ///
+ /// This method assigns an array of values to an array of SqlParameters.
+ ///
+ /// array of SqlParameters to be assigned values
+ /// array of objects holding the values to be assigned
+ private static void AssignParameterValues(OracleParameter[] commandParameters, object[] parameterValues)
+ {
+ if ((commandParameters == null) || (parameterValues == null))
+ {
+ //do nothing if we get no data
+ return;
+ }
+
+ // we must have the same number of values as we pave parameters to put them in
+ if (commandParameters.Length != parameterValues.Length)
+ {
+ throw new ArgumentException("Parameter count does not match Parameter Value count.");
+ }
+
+ //iterate through the SqlParameters, assigning the values from the corresponding position in the
+ //value array
+ for (int i = 0, j = commandParameters.Length; i < j; i++)
+ {
+ commandParameters[i].Value = parameterValues[i];
+ }
+ }
+
+ ///
+ /// This method opens (if necessary) and assigns a connection, transaction, command type and parameters
+ /// to the provided command.
+ ///
+ /// the SqlCommand to be prepared
+ /// a valid OracleConnection, on which to execute this command
+ /// a valid OracleTransaction, or 'null'
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParameters to be associated with the command or 'null' if no parameters are required
+ private static void PrepareCommand(OracleCommand command, OracleConnection connection, OracleTransaction transaction, CommandType commandType, string commandText, OracleParameter[] commandParameters)
+ {
+ //if the provided connection is not open, we will open it
+ if (connection.State != ConnectionState.Open)
+ {
+ connection.Open();
+ }
+
+ //associate the connection with the command
+ command.Connection = connection;
+
+ //set the command text (stored procedure name or SQL statement)
+ command.CommandText = commandText;
+
+ //if we were provided a transaction, assign it.
+ if (transaction != null)
+ {
+ command.Transaction = transaction;
+ }
+
+ //set the command type
+ command.CommandType = commandType;
+
+ //attach the command parameters if they are provided
+ if (commandParameters != null)
+ {
+ AttachParameters(command, commandParameters);
+ }
+ }
+
+
+ #endregion private utility methods & constructors
+
+ #region ExecuteNonQuery
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset and takes no parameters) against the database specified in
+ /// the connection string.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders");
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteNonQuery(connectionString, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset) against the database specified in the connection string
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create & open a OracleConnection, and dispose of it after we are done.
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ {
+ cn.Open();
+
+ //call the overload that takes a connection in place of the connection string
+ return ExecuteNonQuery(cn, commandType, commandText, commandParameters);
+ }
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns no resultset) against the database specified in
+ /// the connection string using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(connString, "PublishOrders", 24, 36);
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored prcedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(string connectionString, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset and takes no parameters) against the provided OracleConnection.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(conn, CommandType.StoredProcedure, "PublishOrders");
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleConnection connection, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteNonQuery(connection, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset) against the specified OracleConnection
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(conn, CommandType.StoredProcedure, "PublishOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, connection, null, commandType, commandText, commandParameters);
+
+ //finally, execute the command.
+ int retval = cmd.ExecuteNonQuery();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+ }
+
+ public static int ExecuteNonQueryWithTimeout(string connectionString, CommandType commandType, string commandText, int cmdTimeout)
+ {
+ //create a command and prepare it for execution
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ {
+ cn.Open();
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, cn, null, commandType, commandText, null);
+ cmd.CommandTimeout = cmdTimeout;
+ //finally, execute the command.
+ int retval = cmd.ExecuteNonQuery();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+ }
+
+ }
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns no resultset) against the specified OracleConnection
+ /// using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(conn, "PublishOrders", 24, 36);
+ ///
+ /// a valid OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleConnection connection, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteNonQuery(connection, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteNonQuery(connection, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset and takes no parameters) against the provided OracleTransaction.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "PublishOrders");
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleTransaction transaction, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteNonQuery(transaction, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset) against the specified OracleTransaction
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);
+
+ //finally, execute the command.
+ int retval = cmd.ExecuteNonQuery();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns no resultset) against the specified
+ /// OracleTransaction using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(conn, trans, "PublishOrders", 24, 36);
+ ///
+ /// a valid OracleTransaction
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleTransaction transaction, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName);
+ }
+
+
+ #endregion ExecuteNonQuery
+
+ #region ExecuteDataSet
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the database specified in
+ /// the connection string.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(connString, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(string connectionString, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteDataset(connectionString, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the database specified in the connection string
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(connString, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create & open a OracleConnection, and dispose of it after we are done.
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ {
+ cn.Open();
+
+ //call the overload that takes a connection in place of the connection string
+ return ExecuteDataset(cn, commandType, commandText, commandParameters);
+ }
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the database specified in
+ /// the connection string using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(connString, "GetOrders", 24, 36);
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(string connectionString, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteDataset(connectionString, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteDataset(connectionString, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided OracleConnection.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(conn, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleConnection connection, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteDataset(connection, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the specified OracleConnection
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(conn, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, connection, null, commandType, commandText, commandParameters);
+
+ //create the DataAdapter & DataSet
+ OracleDataAdapter da = new OracleDataAdapter(cmd);
+ DataSet ds = new DataSet();
+
+ //fill the DataSet using default values for DataTable names, etc.
+ da.Fill(ds);
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+
+ //return the dataset
+ return ds;
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified OracleConnection
+ /// using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(conn, "GetOrders", 24, 36);
+ ///
+ /// a valid OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleConnection connection, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteDataset(connection, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteDataset(connection, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided OracleTransaction.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(trans, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleTransaction transaction, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteDataset(transaction, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the specified OracleTransaction
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(trans, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);
+
+ //create the DataAdapter & DataSet
+ OracleDataAdapter da = new OracleDataAdapter(cmd);
+ DataSet ds = new DataSet();
+
+ //fill the DataSet using default values for DataTable names, etc.
+ da.Fill(ds);
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+
+ //return the dataset
+ return ds;
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified
+ /// OracleTransaction using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(trans, "GetOrders", 24, 36);
+ ///
+ /// a valid OracleTransaction
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleTransaction transaction, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteDataset(transaction, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteDataset(transaction, CommandType.StoredProcedure, spName);
+ }
+
+ #endregion ExecuteDataSet
+
+ #region ExecuteReader
+
+ ///
+ /// this enum is used to indicate whether the connection was provided by the caller, or created by SqlHelper, so that
+ /// we can set the appropriate CommandBehavior when calling ExecuteReader()
+ ///
+ private enum OracleConnectionOwnership
+ {
+ /// Connection is owned and managed by SqlHelper
+ Internal,
+ /// Connection is owned and managed by the caller
+ External
+ }
+
+ ///
+ /// Create and prepare a SqlCommand, and call ExecuteReader with the appropriate CommandBehavior.
+ ///
+ ///
+ /// If we created and opened the connection, we want the connection to be closed when the DataReader is closed.
+ ///
+ /// If the caller provided the connection, we want to leave it to them to manage.
+ ///
+ /// a valid OracleConnection, on which to execute this command
+ /// a valid OracleTransaction, or 'null'
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParameters to be associated with the command or 'null' if no parameters are required
+ /// indicates whether the connection parameter was provided by the caller, or created by SqlHelper
+ /// SqlDataReader containing the results of the command
+ private static OracleDataReader ExecuteReader(OracleConnection connection, OracleTransaction transaction, CommandType commandType, string commandText, OracleParameter[] commandParameters, OracleConnectionOwnership connectionOwnership)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, connection, transaction, commandType, commandText, commandParameters);
+
+ //create a reader
+ OracleDataReader dr;
+
+ // call ExecuteReader with the appropriate CommandBehavior
+ if (connectionOwnership == OracleConnectionOwnership.External)
+ {
+ dr = cmd.ExecuteReader();
+ }
+ else
+ {
+ dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
+
+ }
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+
+ return dr;
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the database specified in
+ /// the connection string.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(connString, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(string connectionString, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteReader(connectionString, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the database specified in the connection string
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(connString, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create & open a OracleConnection
+ OracleConnection cn = new OracleConnection(connectionString);
+ cn.Open();
+
+ try
+ {
+ //call the private overload that takes an internally owned connection in place of the connection string
+ return ExecuteReader(cn, null, commandType, commandText, commandParameters, OracleConnectionOwnership.Internal);
+ }
+ catch
+ {
+ //if we fail to return the SqlDatReader, we need to close the connection ourselves
+ cn.Close();
+ throw;
+ }
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the database specified in
+ /// the connection string using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(connString, "GetOrders", 24, 36);
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(string connectionString, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteReader(connectionString, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteReader(connectionString, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided OracleConnection.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(conn, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleConnection connection, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteReader(connection, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the specified OracleConnection
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(conn, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //pass through the call to the private overload using a null transaction value and an externally owned connection
+ return ExecuteReader(connection, null, commandType, commandText, commandParameters, OracleConnectionOwnership.External);
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified OracleConnection
+ /// using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(conn, "GetOrders", 24, 36);
+ ///
+ /// a valid OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleConnection connection, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);
+
+ AssignParameterValues(commandParameters, parameterValues);
+
+ return ExecuteReader(connection, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteReader(connection, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided OracleTransaction.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(trans, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleTransaction transaction, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteReader(transaction, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the specified OracleTransaction
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(trans, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //pass through to private overload, indicating that the connection is owned by the caller
+ return ExecuteReader(transaction.Connection, transaction, commandType, commandText, commandParameters, OracleConnectionOwnership.External);
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified
+ /// OracleTransaction using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(trans, "GetOrders", 24, 36);
+ ///
+ /// a valid OracleTransaction
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleTransaction transaction, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);
+
+ AssignParameterValues(commandParameters, parameterValues);
+
+ return ExecuteReader(transaction, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteReader(transaction, CommandType.StoredProcedure, spName);
+ }
+
+ #endregion ExecuteReader
+
+ #region ExecuteScalar
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset and takes no parameters) against the database specified in
+ /// the connection string.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(connString, CommandType.StoredProcedure, "GetOrderCount");
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(string connectionString, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteScalar(connectionString, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset) against the database specified in the connection string
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(connString, CommandType.StoredProcedure, "GetOrderCount", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create & open a OracleConnection, and dispose of it after we are done.
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ {
+ cn.Open();
+
+ //call the overload that takes a connection in place of the connection string
+ return ExecuteScalar(cn, commandType, commandText, commandParameters);
+ }
+ }
+
+ ///
+ /// Execute a stored procedure via a OracleCommand (that returns a 1x1 resultset) against the database specified in
+ /// the connection string using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(connString, "GetOrderCount", 24, 36);
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(string connectionString, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteScalar(connectionString, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteScalar(connectionString, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset and takes no parameters) against the provided OracleConnection.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(conn, CommandType.StoredProcedure, "GetOrderCount");
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleConnection connection, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteScalar(connection, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset) against the specified OracleConnection
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(conn, CommandType.StoredProcedure, "GetOrderCount", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, connection, null, commandType, commandText, commandParameters);
+
+ //execute the command & return the results
+ object retval = cmd.ExecuteScalar();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+
+ }
+
+ ///
+ /// Execute a stored procedure via a OracleCommand (that returns a 1x1 resultset) against the specified OracleConnection
+ /// using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(conn, "GetOrderCount", 24, 36);
+ ///
+ /// a valid OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleConnection connection, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteScalar(connection, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteScalar(connection, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset and takes no parameters) against the provided OracleTransaction.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(trans, CommandType.StoredProcedure, "GetOrderCount");
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleTransaction transaction, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteScalar(transaction, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset) against the specified OracleTransaction
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(trans, CommandType.StoredProcedure, "GetOrderCount", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);
+
+ //execute the command & return the results
+ object retval = cmd.ExecuteScalar();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+ }
+
+ ///
+ /// Execute a stored procedure via a OracleCommand (that returns a 1x1 resultset) against the specified
+ /// OracleTransaction using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(trans, "GetOrderCount", 24, 36);
+ ///
+ /// a valid OracleTransaction
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleTransaction transaction, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteScalar(transaction, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteScalar(transaction, CommandType.StoredProcedure, spName);
+ }
+
+ #endregion ExecuteScalar
+
+
+ }
+ ///
+ /// OracleHelperParameterCache provides functions to leverage a static cache of procedure parameters, and the
+ /// ability to discover parameters for stored procedures at run-time.
+ ///
+ ///
+
+ public sealed class OracleHelperParameterCache
+ {
+ #region private methods, variables, and constructors
+
+ //Since this class provides only static methods, make the default constructor private to prevent
+ //instances from being created with "new SqlHelperParameterCache()".
+ private OracleHelperParameterCache() { }
+
+ private static Hashtable paramCache = Hashtable.Synchronized(new Hashtable());
+
+ ///
+ /// resolve at run time the appropriate set of SqlParameters for a stored procedure
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// whether or not to include their return value parameter
+ ///
+ private static OracleParameter[] DiscoverSpParameterSet(string connectionString, string spName, bool includeReturnValueParameter)
+ {
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ using (OracleCommand cmd = new OracleCommand(spName, cn))
+ {
+ cn.Open();
+ cmd.CommandType = CommandType.StoredProcedure;
+ OracleCommandBuilder.DeriveParameters(cmd);
+
+ if (!includeReturnValueParameter)
+ {
+ cmd.Parameters.RemoveAt(0);
+ }
+
+ OracleParameter[] discoveredParameters = new OracleParameter[cmd.Parameters.Count]; ;
+
+ cmd.Parameters.CopyTo(discoveredParameters, 0);
+
+ return discoveredParameters;
+ }
+ }
+
+ //deep copy of cached OracleParameter array
+ private static OracleParameter[] CloneParameters(OracleParameter[] originalParameters)
+ {
+ OracleParameter[] clonedParameters = new OracleParameter[originalParameters.Length];
+
+ for (int i = 0, j = originalParameters.Length; i < j; i++)
+ {
+ clonedParameters[i] = (OracleParameter)((ICloneable)originalParameters[i]).Clone();
+ }
+
+ return clonedParameters;
+ }
+
+ #endregion private methods, variables, and constructors
+
+ #region caching functions
+
+ ///
+ /// add parameter array to the cache
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters to be cached
+ public static void CacheParameterSet(string connectionString, string commandText, params OracleParameter[] commandParameters)
+ {
+ string hashKey = connectionString + ":" + commandText;
+
+ paramCache[hashKey] = commandParameters;
+ }
+
+ ///
+ /// retrieve a parameter array from the cache
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters
+ public static OracleParameter[] GetCachedParameterSet(string connectionString, string commandText)
+ {
+ string hashKey = connectionString + ":" + commandText;
+
+ OracleParameter[] cachedParameters = (OracleParameter[])paramCache[hashKey];
+
+ if (cachedParameters == null)
+ {
+ return null;
+ }
+ return CloneParameters(cachedParameters);
+ }
+
+ #endregion caching functions
+
+ #region Parameter Discovery Functions
+
+ ///
+ /// Retrieves the set of SqlParameters appropriate for the stored procedure
+ ///
+ ///
+ /// This method will query the database for this information, and then store it in a cache for future requests.
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// an array of SqlParameters
+ public static OracleParameter[] GetSpParameterSet(string connectionString, string spName)
+ {
+ return GetSpParameterSet(connectionString, spName, false);
+ }
+
+ ///
+ /// Retrieves the set of SqlParameters appropriate for the stored procedure
+ ///
+ ///
+ /// This method will query the database for this information, and then store it in a cache for future requests.
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// a bool value indicating whether the return value parameter should be included in the results
+ /// an array of SqlParameters
+ public static OracleParameter[] GetSpParameterSet(string connectionString, string spName, bool includeReturnValueParameter)
+ {
+ string hashKey = connectionString + ":" + spName + (includeReturnValueParameter ? ":include ReturnValue Parameter" : "");
+
+ OracleParameter[] cachedParameters;
+
+ cachedParameters = (OracleParameter[])paramCache[hashKey];
+
+ if (cachedParameters == null)
+ {
+ cachedParameters = (OracleParameter[])(paramCache[hashKey] = DiscoverSpParameterSet(connectionString, spName, includeReturnValueParameter));
+ }
+
+ return CloneParameters(cachedParameters);
+ }
+
+ #endregion Parameter Discovery Functions
+ }
+}
diff --git a/Utility.cs b/Utility.cs
index 1429fd9..4e64d66 100644
--- a/Utility.cs
+++ b/Utility.cs
@@ -17,6 +17,11 @@
{
public class Utility
{
+ public static string DBServer;
+ public static string Database;
+ public static string UserID;
+ public static string DBPassword;
+
public static void SetBallons(GSOBalloon featureTooltip,GSOBalloonEx balloonEx)
{
featureTooltip.CacheFilePath = Path.GetDirectoryName(Application.ExecutablePath) + "/GeoScene/Globe/Temp";
diff --git a/bin/x64/Debug/LSPipeline.exe b/bin/x64/Debug/LSPipeline.exe
index 833a5e5..76f838b 100644
--- a/bin/x64/Debug/LSPipeline.exe
+++ b/bin/x64/Debug/LSPipeline.exe
Binary files differ
diff --git a/bin/x64/Debug/LSPipeline.pdb b/bin/x64/Debug/LSPipeline.pdb
index 245e727..28c81dc 100644
--- a/bin/x64/Debug/LSPipeline.pdb
+++ b/bin/x64/Debug/LSPipeline.pdb
Binary files differ
diff --git a/bin/x64/Debug/databaseConfigOracle.xml b/bin/x64/Debug/databaseConfigOracle.xml
index 7e48b08..94be70c 100644
--- a/bin/x64/Debug/databaseConfigOracle.xml
+++ b/bin/x64/Debug/databaseConfigOracle.xml
@@ -2,7 +2,7 @@
True
192.168.0.203
- szhtdb2
- release
- release
+ eydb2
+ scott
+ scott
\ No newline at end of file
diff --git a/FrmDatabaseParaSettingOracle.cs b/FrmDatabaseParaSettingOracle.cs
index 18c5e99..6e97dfb 100644
--- a/FrmDatabaseParaSettingOracle.cs
+++ b/FrmDatabaseParaSettingOracle.cs
@@ -47,12 +47,15 @@
}
string serverIp = textBoxIP.Text.Trim();
+ /*
string hostName = System.Net.Dns.GetHostName();
if (serverIp == hostName || serverIp == "localhost"
|| serverIp == System.Net.Dns.GetHostAddresses(hostName).GetValue(2).ToString())
{
serverIp = "127.0.0.1";
}
+ * */
+
DateTime timeStart = DateTime.Now;
GSODataSource ds = globeControl1.Globe.DataManager.GetDataSourceByName(serverIp + "/" + textBoxDatabase.Text.Trim() + "_" + textBoxUser.Text.Trim());
if (ds == null)
@@ -83,7 +86,7 @@
connectParams.dataSourceName = ds.Name;
connectParams.databaseType = EnumDataSourceType.Oracle;
Utility.connectParamsOfDatabase.Add(connectParams);
-
+ setUtilityValue(connectParams);
WriteXML();
MessageBox.Show("连接Oracle数据库成功,用时:" + secondsConnectOracle.ToString() + "秒", "提示");
}
@@ -92,6 +95,14 @@
this.Close();
}
+ private void setUtilityValue(DatabaseConnectParams connectParams)
+ {
+ Utility.DBServer = connectParams.ip;
+ Utility.Database = connectParams.databaseName;
+ Utility.UserID = connectParams.userName;
+ Utility.DBPassword = connectParams.password;
+ }
+
private void ReadXML()
{
string strFileName = Path.GetDirectoryName(Application.ExecutablePath) + "/databaseConfigOracle.xml";
diff --git a/GXBuilder.cs b/GXBuilder.cs
new file mode 100644
index 0000000..b2ec9b2
--- /dev/null
+++ b/GXBuilder.cs
@@ -0,0 +1,187 @@
+using System;
+using System.Data;
+using System.Drawing;
+using System.Runtime.InteropServices;
+using GeoScene.Data;
+using GeoScene.Engine;
+using GeoScene.Globe;
+
+namespace WorldGIS
+{
+ public class GXBuilder : ModelBuilder
+ {
+ private static double diameter = 0.1;
+
+ public GXBuilder(GSODataSource ds)
+ : base(ds)
+ {
+
+ }
+
+ public override bool validate(GSOLayer layer)
+ {
+ return true;
+ }
+
+ ///
+ ///
+ ///
+ /// 追加或修改
+ /// 高程入库或埋深入库
+ ///
+ public override bool doBuild(EnumUpdateMode updateMode,
+ EnumBuildMode buildMode,
+ BaseParam param)
+ {
+ LineParam lineParam = param as LineParam;
+ GSOFeatureDataset newFeatureSet = ds.GetDatasetByName(lineParam.layerName) as GSOFeatureDataset;
+ if (newFeatureSet == null)
+ {
+ newFeatureSet = CreateDBFeatureDataset(layer, lineParam.layerName);
+ }
+ newFeatureSet.Open();
+ GSOFeatures features = layer.GetAllFeatures(true);
+ for (int i = 0; i < features.Length; i++)
+ {
+ GSOFeature f = features[i];
+ GSOGeoPolyline3D lineeee = f.Geometry as GSOGeoPolyline3D;
+ if (lineeee == null || lineeee.GetSpaceLength(true, 6378137) == 0)
+ {
+ LogHelper.Error("出现数据无法入库:" + f.ID);
+ continue;
+ }
+
+ GSOFeature newFeature = newFeatureSet.CreateFeature();
+
+ double radius = diameter; //创建光纤的半径
+ newFeature.Geometry = updateGemotry(f, lineParam, radius, buildMode);
+ newFeature.Geometry.Style = getPipeLineStyle(lineParam, f, radius);
+ newFeature.Name = f.GetFieldAsString(lineParam.uniqueIdFieldName);
+ setFeatureValueByShapeFeature(f, newFeature);
+ // newFeatureSet
+ if (newFeatureSet.GetFeatureByName(newFeature.Name, true).Length > 0)
+ {
+ if (!this.UpdateGXDevice(newFeatureSet.GetFeatureByName(newFeature.Name, true)[0],
+ newFeature))
+ {
+ LogHelper.Error("光纤设备更新失败:" + newFeature.Name+"\r\n");
+ }
+ continue;
+ }
+ newFeatureSet.AddFeature(newFeature);
+ if (!AddGXDevice(newFeature))
+ {
+ LogHelper.Error("光纤数据保存Alarm_Device失败:" + newFeature.Name+"\r\n");
+ }
+ }
+ newFeatureSet.Save();
+ newFeatureSet.Close();
+ return true;
+ }
+
+ private bool AddGXDevice(GSOFeature feature)
+ {
+ //保存数据到设备表
+ try
+ {
+ String deviceType = feature.GetValue("DEVICETYPE") == null
+ ? "" : feature.GetValue("DEVICETYPE").ToString();
+ String devCode = feature.GetValue("DEVICEID") == null
+ ? "" : feature.GetValue("DEVICEID").ToString();
+ String road = feature.GetValue("ROAD") == null
+ ? "" : feature.GetValue("ROAD").ToString();
+
+ //TODO LIST:
+ string sqlCount = "select dbid from alarm_device_type where" +
+ " typename = '" + deviceType + "'";
+ object dbid = OracleUtils.ExecuteScalar(OracleUtils.ConnectionString,
+ CommandType.Text, sqlCount);
+ if (dbid == null)
+ {
+ return false;
+ }
+ int deviceTypeId = int.Parse(dbid.ToString());
+ string sql = "Insert into alarm_device (DBID,ACTIVE,DEVCODE,DEVNAME,FACTORY," +
+ "INSTALLDATE,GAOCHENG,HEIGHT,LATITUDE,LONGTITUDE,DEVICETYPE_ID) " +
+ "values (SEQ_DEVICE_ID.NEXTVAL, 1, '" + devCode + "', '" + deviceType + devCode +
+ "', " + "'航天二院', " + "to_date('" + DateTime.Now.ToString() + "','yyyy/MM/dd hh24:mi::ss'), "
+ + "0, 0, 0, 0, " + deviceTypeId + ")";
+ OracleUtils.ExecuteNonQuery(OracleUtils.ConnectionString, CommandType.Text, sql);
+
+ }
+ catch (Exception e)
+ {
+ throw;
+ }
+ return true;
+ }
+
+ private bool UpdateGXDevice(GSOFeature feature, GSOFeature newFeature)
+ {
+ String deviceType = newFeature.GetValue("DEVICETYPE") == null
+ ? "" : newFeature.GetValue("DEVICETYPE").ToString();
+ String devCode = newFeature.GetValue("DEVICEID") == null
+ ? "" : newFeature.GetValue("DEVICEID").ToString();
+ String road = newFeature.GetValue("ROAD") == null
+ ? "" : newFeature.GetValue("ROAD").ToString();
+
+ feature.Geometry = newFeature.Geometry.Clone();
+ this.setFeatureValueByShapeFeature(newFeature,feature);
+ // feature.Dataset.Save();
+
+ string sqlCount = "select dbid from alarm_device_type where" +
+ " typename = '" + deviceType + "'";
+ object dbid = OracleUtils.ExecuteScalar(OracleUtils.ConnectionString,
+ CommandType.Text, sqlCount);
+ if (dbid == null)
+ {
+ return false;
+ }
+ int deviceTypeId = int.Parse(dbid.ToString());
+
+ string sql = "update alarm_device set FACTORY='" + road +
+ "', DEVICETYPE_ID='" + deviceTypeId +
+ "', DEVNAME='"+deviceType+devCode+"' "+
+ "where devcode='" + devCode + "'";
+ OracleUtils.ExecuteNonQuery(OracleUtils.ConnectionString, CommandType.Text, sql);
+ return true;
+ }
+
+ private GSOLineStyle3D getPipeLineStyle(LineParam lineParam, GSOFeature f, double radius)
+ {
+ GSOPipeLineStyle3D style0 = new GSOPipeLineStyle3D();
+ style0.LineColor = Color.FromArgb(lineParam.transparency, lineParam.lineColor);
+ style0.Slice = lineParam.sliceNum;
+ style0.CornerSliceAngle = lineParam.cornerSliceAngle;
+ style0.Radius = radius;
+ return style0;
+ }
+
+ private GSOGeometry updateGemotry(GSOFeature f, LineParam lineParam, double radius, EnumBuildMode buildMode)
+ {
+
+ f.Geometry.AltitudeMode = (buildMode.Equals(EnumBuildMode.Alititude)) ? EnumAltitudeMode.RelativeToGround : EnumAltitudeMode.Absolute;
+
+ GSOGeoPolyline3D line = f.Geometry as GSOGeoPolyline3D;
+ if (line == null)
+ {
+ return null; //log4net 记录错误处理
+ }
+
+ double deep1 = 0;
+ double deep2 = 0;
+
+ GSOPoint3ds pt3ds = new GSOPoint3ds();
+ for (int n = 0; n < line[0].Count; n++)
+ {
+ GSOPoint3d pt3d = line[0][n];
+ pt3d.Z = 0;
+
+ pt3ds.Add(pt3d);
+ }
+ line[0] = pt3ds;
+ return line;
+ }
+
+ }
+}
diff --git a/HTForms/FrmPipelineModelDataBase.cs b/HTForms/FrmPipelineModelDataBase.cs
index 84a2d7b..3076bdd 100644
--- a/HTForms/FrmPipelineModelDataBase.cs
+++ b/HTForms/FrmPipelineModelDataBase.cs
@@ -91,6 +91,7 @@
}
else
datasource = ds;
+
if (comboBoxExLayer.Text.Trim() == "")
{
MessageBox.Show("请选择一个图层文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
@@ -126,20 +127,12 @@
comboBoxExLayer.Text));
if (layer == null) return;
- FieldValidate fieldValidate = FieldValidateFactory.Create(ValidateConfig.LoadConfig(),
- getEnumValidateType());
-
- if (!fieldValidate.Validate(layer))
+ if (txtModelLayer.Text != "传感设备图层")
{
- DateTime dt=DateTime.Now;
- string logFilePath = Application.StartupPath + "\\log\\" + dt.Year + "\\" + dt.Year + dt.Month + "\\" + dt.Year +
- dt.Month + dt.Day + ".txt";
- MessageBox.Show("选择的数据不符合数据规范,详情见日志" + logFilePath, "提示");
- return;
+ if (!getValidateResult(layer))
+ return;
}
- ModelBuilder lineBuilder = new LineBuilder(datasource);
-
LineParam lineParam = new LineParam();
lineParam.layerName = txtModelLayer.Text;
lineParam.uniqueIdFieldName = cmbID.Text;
@@ -149,14 +142,17 @@
lineParam.diameterFieldName = cmbRadius.Text;
lineParam.relativeMode = (cmbReference.Text == "管顶") ? 0 : 1;
lineParam.lineColor = btnPipelineColor.BackColor;
- lineParam.transparency=Convert.ToByte(ComboboxRansparency.Value);
+ lineParam.transparency = Convert.ToByte(ComboboxRansparency.Value);
lineParam.cornerSliceAngle = Convert.ToDouble(textBoxCornerSliceAngle.Text);
- lineParam.sliceNum=Convert.ToInt32(txtSlice.Text);
+ lineParam.sliceNum = Convert.ToInt32(txtSlice.Text);
lineParam.channelWidth = comboBoxExWidth.Text;
lineParam.channelHeight = comboBoxExHeight.Text;
- lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update,
- checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam);
+ if (txtModelLayer.Text != "传感设备图层")
+ lineBuilder(layer, lineParam);
+ else
+ gxLineBuilder(layer, lineParam);
+
addLayerToGlobeControl(lineParam.layerName);
//this.DialogResult = DialogResult.OK;
MessageBox.Show("入库完成!", "提示");
@@ -167,6 +163,33 @@
}
}
+ bool getValidateResult(GSOLayer layer)
+ {
+ FieldValidate fieldValidate = FieldValidateFactory.Create(ValidateConfig.LoadConfig(),
+ getEnumValidateType());
+
+ if (fieldValidate.Validate(layer)) return true;
+ DateTime dt = DateTime.Now;
+ string logFilePath = Application.StartupPath + "\\log\\" + dt.Year + "\\" + dt.Year + dt.Month +
+ "\\" + dt.Year + dt.Month + dt.Day + ".txt";
+ MessageBox.Show("选择的数据不符合数据规范,详情见日志" + logFilePath, "提示");
+ return false;
+ }
+
+ void lineBuilder(GSOLayer layer,LineParam lineParam)
+ {
+ ModelBuilder lineBuilder = new LineBuilder(datasource);
+ lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update,
+ checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam);
+ }
+
+ void gxLineBuilder(GSOLayer layer, LineParam lineParam)
+ {
+ ModelBuilder lineBuilder = new GXBuilder(datasource);
+ lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update,
+ checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam);
+ }
+
private EnumValidateType getEnumValidateType()
{
if (comboBoxExWidth.Text != "")
diff --git a/LSPipeline.csproj b/LSPipeline.csproj
index 477d8ba..599b492 100644
--- a/LSPipeline.csproj
+++ b/LSPipeline.csproj
@@ -222,6 +222,7 @@
FrmUpdateLayerFieldValues.cs
+
Form
@@ -243,6 +244,7 @@
+
True
diff --git a/LSPipeline.suo b/LSPipeline.suo
index c930f27..92b5d7d 100644
--- a/LSPipeline.suo
+++ b/LSPipeline.suo
Binary files differ
diff --git a/OracleUtils.cs b/OracleUtils.cs
new file mode 100644
index 0000000..c79d316
--- /dev/null
+++ b/OracleUtils.cs
@@ -0,0 +1,1271 @@
+using System;
+using System.Collections;
+using System.Data;
+using System.Data.OracleClient;
+
+namespace WorldGIS
+{
+ public abstract class OracleUtils
+ {
+ // Read the connection strings from the configuration file
+ //public static readonly string ConnectionString = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
+ public static readonly string ConnectionString = @"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=" + Utility.DBServer
+ + ")(PORT=1521))(CONNECT_DATA=(SID=" + Utility.Database
+ + ")));Persist Security Info=True;User Id=" + Utility.UserID
+ + "; Password=" + Utility.DBPassword + "";
+
+ //Create a hashtable for the parameter cached
+ private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());
+
+ #region private utility methods & constructors
+
+ //Since this class provides only static methods, make the default constructor private to prevent
+ //instances from being created with "new SqlHelper()".
+ private OracleUtils() { }
+
+ ///
+ /// This method is used to attach array of SqlParameters to a SqlCommand.
+ ///
+ /// This method will assign a value of DbNull to any parameter with a direction of
+ /// InputOutput and a value of null.
+ ///
+ /// This behavior will prevent default values from being used, but
+ /// this will be the less common case than an intended pure output parameter (derived as InputOutput)
+ /// where the user provided no input value.
+ ///
+ /// The command to which the parameters will be added
+ /// an array of SqlParameters tho be added to command
+ private static void AttachParameters(OracleCommand command, OracleParameter[] commandParameters)
+ {
+ foreach (OracleParameter p in commandParameters)
+ {
+ //check for derived output value with no value assigned
+ if ((p.Direction == ParameterDirection.InputOutput) && (p.Value == null))
+ {
+ p.Value = DBNull.Value;
+ }
+
+ command.Parameters.Add(p);
+ }
+ }
+
+ ///
+ /// This method assigns an array of values to an array of SqlParameters.
+ ///
+ /// array of SqlParameters to be assigned values
+ /// array of objects holding the values to be assigned
+ private static void AssignParameterValues(OracleParameter[] commandParameters, object[] parameterValues)
+ {
+ if ((commandParameters == null) || (parameterValues == null))
+ {
+ //do nothing if we get no data
+ return;
+ }
+
+ // we must have the same number of values as we pave parameters to put them in
+ if (commandParameters.Length != parameterValues.Length)
+ {
+ throw new ArgumentException("Parameter count does not match Parameter Value count.");
+ }
+
+ //iterate through the SqlParameters, assigning the values from the corresponding position in the
+ //value array
+ for (int i = 0, j = commandParameters.Length; i < j; i++)
+ {
+ commandParameters[i].Value = parameterValues[i];
+ }
+ }
+
+ ///
+ /// This method opens (if necessary) and assigns a connection, transaction, command type and parameters
+ /// to the provided command.
+ ///
+ /// the SqlCommand to be prepared
+ /// a valid OracleConnection, on which to execute this command
+ /// a valid OracleTransaction, or 'null'
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParameters to be associated with the command or 'null' if no parameters are required
+ private static void PrepareCommand(OracleCommand command, OracleConnection connection, OracleTransaction transaction, CommandType commandType, string commandText, OracleParameter[] commandParameters)
+ {
+ //if the provided connection is not open, we will open it
+ if (connection.State != ConnectionState.Open)
+ {
+ connection.Open();
+ }
+
+ //associate the connection with the command
+ command.Connection = connection;
+
+ //set the command text (stored procedure name or SQL statement)
+ command.CommandText = commandText;
+
+ //if we were provided a transaction, assign it.
+ if (transaction != null)
+ {
+ command.Transaction = transaction;
+ }
+
+ //set the command type
+ command.CommandType = commandType;
+
+ //attach the command parameters if they are provided
+ if (commandParameters != null)
+ {
+ AttachParameters(command, commandParameters);
+ }
+ }
+
+
+ #endregion private utility methods & constructors
+
+ #region ExecuteNonQuery
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset and takes no parameters) against the database specified in
+ /// the connection string.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders");
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteNonQuery(connectionString, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset) against the database specified in the connection string
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create & open a OracleConnection, and dispose of it after we are done.
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ {
+ cn.Open();
+
+ //call the overload that takes a connection in place of the connection string
+ return ExecuteNonQuery(cn, commandType, commandText, commandParameters);
+ }
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns no resultset) against the database specified in
+ /// the connection string using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(connString, "PublishOrders", 24, 36);
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored prcedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(string connectionString, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset and takes no parameters) against the provided OracleConnection.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(conn, CommandType.StoredProcedure, "PublishOrders");
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleConnection connection, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteNonQuery(connection, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset) against the specified OracleConnection
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(conn, CommandType.StoredProcedure, "PublishOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, connection, null, commandType, commandText, commandParameters);
+
+ //finally, execute the command.
+ int retval = cmd.ExecuteNonQuery();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+ }
+
+ public static int ExecuteNonQueryWithTimeout(string connectionString, CommandType commandType, string commandText, int cmdTimeout)
+ {
+ //create a command and prepare it for execution
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ {
+ cn.Open();
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, cn, null, commandType, commandText, null);
+ cmd.CommandTimeout = cmdTimeout;
+ //finally, execute the command.
+ int retval = cmd.ExecuteNonQuery();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+ }
+
+ }
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns no resultset) against the specified OracleConnection
+ /// using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(conn, "PublishOrders", 24, 36);
+ ///
+ /// a valid OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleConnection connection, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteNonQuery(connection, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteNonQuery(connection, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset and takes no parameters) against the provided OracleTransaction.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "PublishOrders");
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleTransaction transaction, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteNonQuery(transaction, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset) against the specified OracleTransaction
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);
+
+ //finally, execute the command.
+ int retval = cmd.ExecuteNonQuery();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns no resultset) against the specified
+ /// OracleTransaction using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(conn, trans, "PublishOrders", 24, 36);
+ ///
+ /// a valid OracleTransaction
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleTransaction transaction, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName);
+ }
+
+
+ #endregion ExecuteNonQuery
+
+ #region ExecuteDataSet
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the database specified in
+ /// the connection string.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(connString, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(string connectionString, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteDataset(connectionString, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the database specified in the connection string
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(connString, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create & open a OracleConnection, and dispose of it after we are done.
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ {
+ cn.Open();
+
+ //call the overload that takes a connection in place of the connection string
+ return ExecuteDataset(cn, commandType, commandText, commandParameters);
+ }
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the database specified in
+ /// the connection string using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(connString, "GetOrders", 24, 36);
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(string connectionString, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteDataset(connectionString, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteDataset(connectionString, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided OracleConnection.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(conn, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleConnection connection, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteDataset(connection, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the specified OracleConnection
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(conn, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, connection, null, commandType, commandText, commandParameters);
+
+ //create the DataAdapter & DataSet
+ OracleDataAdapter da = new OracleDataAdapter(cmd);
+ DataSet ds = new DataSet();
+
+ //fill the DataSet using default values for DataTable names, etc.
+ da.Fill(ds);
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+
+ //return the dataset
+ return ds;
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified OracleConnection
+ /// using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(conn, "GetOrders", 24, 36);
+ ///
+ /// a valid OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleConnection connection, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteDataset(connection, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteDataset(connection, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided OracleTransaction.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(trans, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleTransaction transaction, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteDataset(transaction, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the specified OracleTransaction
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(trans, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);
+
+ //create the DataAdapter & DataSet
+ OracleDataAdapter da = new OracleDataAdapter(cmd);
+ DataSet ds = new DataSet();
+
+ //fill the DataSet using default values for DataTable names, etc.
+ da.Fill(ds);
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+
+ //return the dataset
+ return ds;
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified
+ /// OracleTransaction using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(trans, "GetOrders", 24, 36);
+ ///
+ /// a valid OracleTransaction
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleTransaction transaction, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteDataset(transaction, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteDataset(transaction, CommandType.StoredProcedure, spName);
+ }
+
+ #endregion ExecuteDataSet
+
+ #region ExecuteReader
+
+ ///
+ /// this enum is used to indicate whether the connection was provided by the caller, or created by SqlHelper, so that
+ /// we can set the appropriate CommandBehavior when calling ExecuteReader()
+ ///
+ private enum OracleConnectionOwnership
+ {
+ /// Connection is owned and managed by SqlHelper
+ Internal,
+ /// Connection is owned and managed by the caller
+ External
+ }
+
+ ///
+ /// Create and prepare a SqlCommand, and call ExecuteReader with the appropriate CommandBehavior.
+ ///
+ ///
+ /// If we created and opened the connection, we want the connection to be closed when the DataReader is closed.
+ ///
+ /// If the caller provided the connection, we want to leave it to them to manage.
+ ///
+ /// a valid OracleConnection, on which to execute this command
+ /// a valid OracleTransaction, or 'null'
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParameters to be associated with the command or 'null' if no parameters are required
+ /// indicates whether the connection parameter was provided by the caller, or created by SqlHelper
+ /// SqlDataReader containing the results of the command
+ private static OracleDataReader ExecuteReader(OracleConnection connection, OracleTransaction transaction, CommandType commandType, string commandText, OracleParameter[] commandParameters, OracleConnectionOwnership connectionOwnership)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, connection, transaction, commandType, commandText, commandParameters);
+
+ //create a reader
+ OracleDataReader dr;
+
+ // call ExecuteReader with the appropriate CommandBehavior
+ if (connectionOwnership == OracleConnectionOwnership.External)
+ {
+ dr = cmd.ExecuteReader();
+ }
+ else
+ {
+ dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
+
+ }
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+
+ return dr;
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the database specified in
+ /// the connection string.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(connString, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(string connectionString, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteReader(connectionString, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the database specified in the connection string
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(connString, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create & open a OracleConnection
+ OracleConnection cn = new OracleConnection(connectionString);
+ cn.Open();
+
+ try
+ {
+ //call the private overload that takes an internally owned connection in place of the connection string
+ return ExecuteReader(cn, null, commandType, commandText, commandParameters, OracleConnectionOwnership.Internal);
+ }
+ catch
+ {
+ //if we fail to return the SqlDatReader, we need to close the connection ourselves
+ cn.Close();
+ throw;
+ }
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the database specified in
+ /// the connection string using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(connString, "GetOrders", 24, 36);
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(string connectionString, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteReader(connectionString, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteReader(connectionString, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided OracleConnection.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(conn, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleConnection connection, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteReader(connection, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the specified OracleConnection
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(conn, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //pass through the call to the private overload using a null transaction value and an externally owned connection
+ return ExecuteReader(connection, null, commandType, commandText, commandParameters, OracleConnectionOwnership.External);
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified OracleConnection
+ /// using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(conn, "GetOrders", 24, 36);
+ ///
+ /// a valid OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleConnection connection, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);
+
+ AssignParameterValues(commandParameters, parameterValues);
+
+ return ExecuteReader(connection, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteReader(connection, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided OracleTransaction.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(trans, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleTransaction transaction, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteReader(transaction, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the specified OracleTransaction
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(trans, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //pass through to private overload, indicating that the connection is owned by the caller
+ return ExecuteReader(transaction.Connection, transaction, commandType, commandText, commandParameters, OracleConnectionOwnership.External);
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified
+ /// OracleTransaction using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(trans, "GetOrders", 24, 36);
+ ///
+ /// a valid OracleTransaction
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleTransaction transaction, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);
+
+ AssignParameterValues(commandParameters, parameterValues);
+
+ return ExecuteReader(transaction, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteReader(transaction, CommandType.StoredProcedure, spName);
+ }
+
+ #endregion ExecuteReader
+
+ #region ExecuteScalar
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset and takes no parameters) against the database specified in
+ /// the connection string.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(connString, CommandType.StoredProcedure, "GetOrderCount");
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(string connectionString, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteScalar(connectionString, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset) against the database specified in the connection string
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(connString, CommandType.StoredProcedure, "GetOrderCount", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create & open a OracleConnection, and dispose of it after we are done.
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ {
+ cn.Open();
+
+ //call the overload that takes a connection in place of the connection string
+ return ExecuteScalar(cn, commandType, commandText, commandParameters);
+ }
+ }
+
+ ///
+ /// Execute a stored procedure via a OracleCommand (that returns a 1x1 resultset) against the database specified in
+ /// the connection string using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(connString, "GetOrderCount", 24, 36);
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(string connectionString, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteScalar(connectionString, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteScalar(connectionString, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset and takes no parameters) against the provided OracleConnection.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(conn, CommandType.StoredProcedure, "GetOrderCount");
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleConnection connection, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteScalar(connection, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset) against the specified OracleConnection
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(conn, CommandType.StoredProcedure, "GetOrderCount", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, connection, null, commandType, commandText, commandParameters);
+
+ //execute the command & return the results
+ object retval = cmd.ExecuteScalar();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+
+ }
+
+ ///
+ /// Execute a stored procedure via a OracleCommand (that returns a 1x1 resultset) against the specified OracleConnection
+ /// using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(conn, "GetOrderCount", 24, 36);
+ ///
+ /// a valid OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleConnection connection, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteScalar(connection, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteScalar(connection, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset and takes no parameters) against the provided OracleTransaction.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(trans, CommandType.StoredProcedure, "GetOrderCount");
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleTransaction transaction, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteScalar(transaction, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset) against the specified OracleTransaction
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(trans, CommandType.StoredProcedure, "GetOrderCount", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);
+
+ //execute the command & return the results
+ object retval = cmd.ExecuteScalar();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+ }
+
+ ///
+ /// Execute a stored procedure via a OracleCommand (that returns a 1x1 resultset) against the specified
+ /// OracleTransaction using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(trans, "GetOrderCount", 24, 36);
+ ///
+ /// a valid OracleTransaction
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleTransaction transaction, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteScalar(transaction, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteScalar(transaction, CommandType.StoredProcedure, spName);
+ }
+
+ #endregion ExecuteScalar
+
+
+ }
+ ///
+ /// OracleHelperParameterCache provides functions to leverage a static cache of procedure parameters, and the
+ /// ability to discover parameters for stored procedures at run-time.
+ ///
+ ///
+
+ public sealed class OracleHelperParameterCache
+ {
+ #region private methods, variables, and constructors
+
+ //Since this class provides only static methods, make the default constructor private to prevent
+ //instances from being created with "new SqlHelperParameterCache()".
+ private OracleHelperParameterCache() { }
+
+ private static Hashtable paramCache = Hashtable.Synchronized(new Hashtable());
+
+ ///
+ /// resolve at run time the appropriate set of SqlParameters for a stored procedure
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// whether or not to include their return value parameter
+ ///
+ private static OracleParameter[] DiscoverSpParameterSet(string connectionString, string spName, bool includeReturnValueParameter)
+ {
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ using (OracleCommand cmd = new OracleCommand(spName, cn))
+ {
+ cn.Open();
+ cmd.CommandType = CommandType.StoredProcedure;
+ OracleCommandBuilder.DeriveParameters(cmd);
+
+ if (!includeReturnValueParameter)
+ {
+ cmd.Parameters.RemoveAt(0);
+ }
+
+ OracleParameter[] discoveredParameters = new OracleParameter[cmd.Parameters.Count]; ;
+
+ cmd.Parameters.CopyTo(discoveredParameters, 0);
+
+ return discoveredParameters;
+ }
+ }
+
+ //deep copy of cached OracleParameter array
+ private static OracleParameter[] CloneParameters(OracleParameter[] originalParameters)
+ {
+ OracleParameter[] clonedParameters = new OracleParameter[originalParameters.Length];
+
+ for (int i = 0, j = originalParameters.Length; i < j; i++)
+ {
+ clonedParameters[i] = (OracleParameter)((ICloneable)originalParameters[i]).Clone();
+ }
+
+ return clonedParameters;
+ }
+
+ #endregion private methods, variables, and constructors
+
+ #region caching functions
+
+ ///
+ /// add parameter array to the cache
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters to be cached
+ public static void CacheParameterSet(string connectionString, string commandText, params OracleParameter[] commandParameters)
+ {
+ string hashKey = connectionString + ":" + commandText;
+
+ paramCache[hashKey] = commandParameters;
+ }
+
+ ///
+ /// retrieve a parameter array from the cache
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters
+ public static OracleParameter[] GetCachedParameterSet(string connectionString, string commandText)
+ {
+ string hashKey = connectionString + ":" + commandText;
+
+ OracleParameter[] cachedParameters = (OracleParameter[])paramCache[hashKey];
+
+ if (cachedParameters == null)
+ {
+ return null;
+ }
+ return CloneParameters(cachedParameters);
+ }
+
+ #endregion caching functions
+
+ #region Parameter Discovery Functions
+
+ ///
+ /// Retrieves the set of SqlParameters appropriate for the stored procedure
+ ///
+ ///
+ /// This method will query the database for this information, and then store it in a cache for future requests.
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// an array of SqlParameters
+ public static OracleParameter[] GetSpParameterSet(string connectionString, string spName)
+ {
+ return GetSpParameterSet(connectionString, spName, false);
+ }
+
+ ///
+ /// Retrieves the set of SqlParameters appropriate for the stored procedure
+ ///
+ ///
+ /// This method will query the database for this information, and then store it in a cache for future requests.
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// a bool value indicating whether the return value parameter should be included in the results
+ /// an array of SqlParameters
+ public static OracleParameter[] GetSpParameterSet(string connectionString, string spName, bool includeReturnValueParameter)
+ {
+ string hashKey = connectionString + ":" + spName + (includeReturnValueParameter ? ":include ReturnValue Parameter" : "");
+
+ OracleParameter[] cachedParameters;
+
+ cachedParameters = (OracleParameter[])paramCache[hashKey];
+
+ if (cachedParameters == null)
+ {
+ cachedParameters = (OracleParameter[])(paramCache[hashKey] = DiscoverSpParameterSet(connectionString, spName, includeReturnValueParameter));
+ }
+
+ return CloneParameters(cachedParameters);
+ }
+
+ #endregion Parameter Discovery Functions
+ }
+}
diff --git a/Utility.cs b/Utility.cs
index 1429fd9..4e64d66 100644
--- a/Utility.cs
+++ b/Utility.cs
@@ -17,6 +17,11 @@
{
public class Utility
{
+ public static string DBServer;
+ public static string Database;
+ public static string UserID;
+ public static string DBPassword;
+
public static void SetBallons(GSOBalloon featureTooltip,GSOBalloonEx balloonEx)
{
featureTooltip.CacheFilePath = Path.GetDirectoryName(Application.ExecutablePath) + "/GeoScene/Globe/Temp";
diff --git a/bin/x64/Debug/LSPipeline.exe b/bin/x64/Debug/LSPipeline.exe
index 833a5e5..76f838b 100644
--- a/bin/x64/Debug/LSPipeline.exe
+++ b/bin/x64/Debug/LSPipeline.exe
Binary files differ
diff --git a/bin/x64/Debug/LSPipeline.pdb b/bin/x64/Debug/LSPipeline.pdb
index 245e727..28c81dc 100644
--- a/bin/x64/Debug/LSPipeline.pdb
+++ b/bin/x64/Debug/LSPipeline.pdb
Binary files differ
diff --git a/bin/x64/Debug/databaseConfigOracle.xml b/bin/x64/Debug/databaseConfigOracle.xml
index 7e48b08..94be70c 100644
--- a/bin/x64/Debug/databaseConfigOracle.xml
+++ b/bin/x64/Debug/databaseConfigOracle.xml
@@ -2,7 +2,7 @@
True
192.168.0.203
- szhtdb2
- release
- release
+ eydb2
+ scott
+ scott
\ No newline at end of file
diff --git a/bin/x64/Debug/log.txt b/bin/x64/Debug/log.txt
index 5236cc6..73bcf38 100644
--- a/bin/x64/Debug/log.txt
+++ b/bin/x64/Debug/log.txt
@@ -27704,3 +27704,75 @@
exception over ------------------------------------------------------------
+
+ exception begin -----------------2016/12/2 9:55:40---------------------
+
+
+
+ e.Message:输入字符串的格式不正确。
+
+ e.Source:mscorlib
+
+ e.TargetSite:Double ParseDouble(System.String, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo)
+
+ e.StackTrace: 在 System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
+ 在 System.Double.Parse(String s, IFormatProvider provider)
+ 在 WorldGIS.CtrlEntitySpaceInfo.positionChanged() 位置 D:\LSPipeline\UserControls\CtrlEntitySpaceInfo.cs:行号 113
+
+
+
+ exception over ------------------------------------------------------------
+
+ exception begin -----------------2016/12/2 9:55:41---------------------
+
+
+
+ e.Message:输入字符串的格式不正确。
+
+ e.Source:mscorlib
+
+ e.TargetSite:Double ParseDouble(System.String, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo)
+
+ e.StackTrace: 在 System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
+ 在 System.Double.Parse(String s, IFormatProvider provider)
+ 在 WorldGIS.CtrlEntitySpaceInfo.positionChanged() 位置 D:\LSPipeline\UserControls\CtrlEntitySpaceInfo.cs:行号 115
+
+
+
+ exception over ------------------------------------------------------------
+
+ exception begin -----------------2016/12/2 9:55:55---------------------
+
+
+
+ e.Message:输入字符串的格式不正确。
+
+ e.Source:mscorlib
+
+ e.TargetSite:Double ParseDouble(System.String, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo)
+
+ e.StackTrace: 在 System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
+ 在 System.Double.Parse(String s, IFormatProvider provider)
+ 在 WorldGIS.CtrlEntitySpaceInfo.positionChanged() 位置 D:\LSPipeline\UserControls\CtrlEntitySpaceInfo.cs:行号 113
+
+
+
+ exception over ------------------------------------------------------------
+
+ exception begin -----------------2016/12/2 9:55:56---------------------
+
+
+
+ e.Message:输入字符串的格式不正确。
+
+ e.Source:mscorlib
+
+ e.TargetSite:Double ParseDouble(System.String, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo)
+
+ e.StackTrace: 在 System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
+ 在 System.Double.Parse(String s, IFormatProvider provider)
+ 在 WorldGIS.CtrlEntitySpaceInfo.positionChanged() 位置 D:\LSPipeline\UserControls\CtrlEntitySpaceInfo.cs:行号 115
+
+
+
+ exception over ------------------------------------------------------------
diff --git a/FrmDatabaseParaSettingOracle.cs b/FrmDatabaseParaSettingOracle.cs
index 18c5e99..6e97dfb 100644
--- a/FrmDatabaseParaSettingOracle.cs
+++ b/FrmDatabaseParaSettingOracle.cs
@@ -47,12 +47,15 @@
}
string serverIp = textBoxIP.Text.Trim();
+ /*
string hostName = System.Net.Dns.GetHostName();
if (serverIp == hostName || serverIp == "localhost"
|| serverIp == System.Net.Dns.GetHostAddresses(hostName).GetValue(2).ToString())
{
serverIp = "127.0.0.1";
}
+ * */
+
DateTime timeStart = DateTime.Now;
GSODataSource ds = globeControl1.Globe.DataManager.GetDataSourceByName(serverIp + "/" + textBoxDatabase.Text.Trim() + "_" + textBoxUser.Text.Trim());
if (ds == null)
@@ -83,7 +86,7 @@
connectParams.dataSourceName = ds.Name;
connectParams.databaseType = EnumDataSourceType.Oracle;
Utility.connectParamsOfDatabase.Add(connectParams);
-
+ setUtilityValue(connectParams);
WriteXML();
MessageBox.Show("连接Oracle数据库成功,用时:" + secondsConnectOracle.ToString() + "秒", "提示");
}
@@ -92,6 +95,14 @@
this.Close();
}
+ private void setUtilityValue(DatabaseConnectParams connectParams)
+ {
+ Utility.DBServer = connectParams.ip;
+ Utility.Database = connectParams.databaseName;
+ Utility.UserID = connectParams.userName;
+ Utility.DBPassword = connectParams.password;
+ }
+
private void ReadXML()
{
string strFileName = Path.GetDirectoryName(Application.ExecutablePath) + "/databaseConfigOracle.xml";
diff --git a/GXBuilder.cs b/GXBuilder.cs
new file mode 100644
index 0000000..b2ec9b2
--- /dev/null
+++ b/GXBuilder.cs
@@ -0,0 +1,187 @@
+using System;
+using System.Data;
+using System.Drawing;
+using System.Runtime.InteropServices;
+using GeoScene.Data;
+using GeoScene.Engine;
+using GeoScene.Globe;
+
+namespace WorldGIS
+{
+ public class GXBuilder : ModelBuilder
+ {
+ private static double diameter = 0.1;
+
+ public GXBuilder(GSODataSource ds)
+ : base(ds)
+ {
+
+ }
+
+ public override bool validate(GSOLayer layer)
+ {
+ return true;
+ }
+
+ ///
+ ///
+ ///
+ /// 追加或修改
+ /// 高程入库或埋深入库
+ ///
+ public override bool doBuild(EnumUpdateMode updateMode,
+ EnumBuildMode buildMode,
+ BaseParam param)
+ {
+ LineParam lineParam = param as LineParam;
+ GSOFeatureDataset newFeatureSet = ds.GetDatasetByName(lineParam.layerName) as GSOFeatureDataset;
+ if (newFeatureSet == null)
+ {
+ newFeatureSet = CreateDBFeatureDataset(layer, lineParam.layerName);
+ }
+ newFeatureSet.Open();
+ GSOFeatures features = layer.GetAllFeatures(true);
+ for (int i = 0; i < features.Length; i++)
+ {
+ GSOFeature f = features[i];
+ GSOGeoPolyline3D lineeee = f.Geometry as GSOGeoPolyline3D;
+ if (lineeee == null || lineeee.GetSpaceLength(true, 6378137) == 0)
+ {
+ LogHelper.Error("出现数据无法入库:" + f.ID);
+ continue;
+ }
+
+ GSOFeature newFeature = newFeatureSet.CreateFeature();
+
+ double radius = diameter; //创建光纤的半径
+ newFeature.Geometry = updateGemotry(f, lineParam, radius, buildMode);
+ newFeature.Geometry.Style = getPipeLineStyle(lineParam, f, radius);
+ newFeature.Name = f.GetFieldAsString(lineParam.uniqueIdFieldName);
+ setFeatureValueByShapeFeature(f, newFeature);
+ // newFeatureSet
+ if (newFeatureSet.GetFeatureByName(newFeature.Name, true).Length > 0)
+ {
+ if (!this.UpdateGXDevice(newFeatureSet.GetFeatureByName(newFeature.Name, true)[0],
+ newFeature))
+ {
+ LogHelper.Error("光纤设备更新失败:" + newFeature.Name+"\r\n");
+ }
+ continue;
+ }
+ newFeatureSet.AddFeature(newFeature);
+ if (!AddGXDevice(newFeature))
+ {
+ LogHelper.Error("光纤数据保存Alarm_Device失败:" + newFeature.Name+"\r\n");
+ }
+ }
+ newFeatureSet.Save();
+ newFeatureSet.Close();
+ return true;
+ }
+
+ private bool AddGXDevice(GSOFeature feature)
+ {
+ //保存数据到设备表
+ try
+ {
+ String deviceType = feature.GetValue("DEVICETYPE") == null
+ ? "" : feature.GetValue("DEVICETYPE").ToString();
+ String devCode = feature.GetValue("DEVICEID") == null
+ ? "" : feature.GetValue("DEVICEID").ToString();
+ String road = feature.GetValue("ROAD") == null
+ ? "" : feature.GetValue("ROAD").ToString();
+
+ //TODO LIST:
+ string sqlCount = "select dbid from alarm_device_type where" +
+ " typename = '" + deviceType + "'";
+ object dbid = OracleUtils.ExecuteScalar(OracleUtils.ConnectionString,
+ CommandType.Text, sqlCount);
+ if (dbid == null)
+ {
+ return false;
+ }
+ int deviceTypeId = int.Parse(dbid.ToString());
+ string sql = "Insert into alarm_device (DBID,ACTIVE,DEVCODE,DEVNAME,FACTORY," +
+ "INSTALLDATE,GAOCHENG,HEIGHT,LATITUDE,LONGTITUDE,DEVICETYPE_ID) " +
+ "values (SEQ_DEVICE_ID.NEXTVAL, 1, '" + devCode + "', '" + deviceType + devCode +
+ "', " + "'航天二院', " + "to_date('" + DateTime.Now.ToString() + "','yyyy/MM/dd hh24:mi::ss'), "
+ + "0, 0, 0, 0, " + deviceTypeId + ")";
+ OracleUtils.ExecuteNonQuery(OracleUtils.ConnectionString, CommandType.Text, sql);
+
+ }
+ catch (Exception e)
+ {
+ throw;
+ }
+ return true;
+ }
+
+ private bool UpdateGXDevice(GSOFeature feature, GSOFeature newFeature)
+ {
+ String deviceType = newFeature.GetValue("DEVICETYPE") == null
+ ? "" : newFeature.GetValue("DEVICETYPE").ToString();
+ String devCode = newFeature.GetValue("DEVICEID") == null
+ ? "" : newFeature.GetValue("DEVICEID").ToString();
+ String road = newFeature.GetValue("ROAD") == null
+ ? "" : newFeature.GetValue("ROAD").ToString();
+
+ feature.Geometry = newFeature.Geometry.Clone();
+ this.setFeatureValueByShapeFeature(newFeature,feature);
+ // feature.Dataset.Save();
+
+ string sqlCount = "select dbid from alarm_device_type where" +
+ " typename = '" + deviceType + "'";
+ object dbid = OracleUtils.ExecuteScalar(OracleUtils.ConnectionString,
+ CommandType.Text, sqlCount);
+ if (dbid == null)
+ {
+ return false;
+ }
+ int deviceTypeId = int.Parse(dbid.ToString());
+
+ string sql = "update alarm_device set FACTORY='" + road +
+ "', DEVICETYPE_ID='" + deviceTypeId +
+ "', DEVNAME='"+deviceType+devCode+"' "+
+ "where devcode='" + devCode + "'";
+ OracleUtils.ExecuteNonQuery(OracleUtils.ConnectionString, CommandType.Text, sql);
+ return true;
+ }
+
+ private GSOLineStyle3D getPipeLineStyle(LineParam lineParam, GSOFeature f, double radius)
+ {
+ GSOPipeLineStyle3D style0 = new GSOPipeLineStyle3D();
+ style0.LineColor = Color.FromArgb(lineParam.transparency, lineParam.lineColor);
+ style0.Slice = lineParam.sliceNum;
+ style0.CornerSliceAngle = lineParam.cornerSliceAngle;
+ style0.Radius = radius;
+ return style0;
+ }
+
+ private GSOGeometry updateGemotry(GSOFeature f, LineParam lineParam, double radius, EnumBuildMode buildMode)
+ {
+
+ f.Geometry.AltitudeMode = (buildMode.Equals(EnumBuildMode.Alititude)) ? EnumAltitudeMode.RelativeToGround : EnumAltitudeMode.Absolute;
+
+ GSOGeoPolyline3D line = f.Geometry as GSOGeoPolyline3D;
+ if (line == null)
+ {
+ return null; //log4net 记录错误处理
+ }
+
+ double deep1 = 0;
+ double deep2 = 0;
+
+ GSOPoint3ds pt3ds = new GSOPoint3ds();
+ for (int n = 0; n < line[0].Count; n++)
+ {
+ GSOPoint3d pt3d = line[0][n];
+ pt3d.Z = 0;
+
+ pt3ds.Add(pt3d);
+ }
+ line[0] = pt3ds;
+ return line;
+ }
+
+ }
+}
diff --git a/HTForms/FrmPipelineModelDataBase.cs b/HTForms/FrmPipelineModelDataBase.cs
index 84a2d7b..3076bdd 100644
--- a/HTForms/FrmPipelineModelDataBase.cs
+++ b/HTForms/FrmPipelineModelDataBase.cs
@@ -91,6 +91,7 @@
}
else
datasource = ds;
+
if (comboBoxExLayer.Text.Trim() == "")
{
MessageBox.Show("请选择一个图层文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
@@ -126,20 +127,12 @@
comboBoxExLayer.Text));
if (layer == null) return;
- FieldValidate fieldValidate = FieldValidateFactory.Create(ValidateConfig.LoadConfig(),
- getEnumValidateType());
-
- if (!fieldValidate.Validate(layer))
+ if (txtModelLayer.Text != "传感设备图层")
{
- DateTime dt=DateTime.Now;
- string logFilePath = Application.StartupPath + "\\log\\" + dt.Year + "\\" + dt.Year + dt.Month + "\\" + dt.Year +
- dt.Month + dt.Day + ".txt";
- MessageBox.Show("选择的数据不符合数据规范,详情见日志" + logFilePath, "提示");
- return;
+ if (!getValidateResult(layer))
+ return;
}
- ModelBuilder lineBuilder = new LineBuilder(datasource);
-
LineParam lineParam = new LineParam();
lineParam.layerName = txtModelLayer.Text;
lineParam.uniqueIdFieldName = cmbID.Text;
@@ -149,14 +142,17 @@
lineParam.diameterFieldName = cmbRadius.Text;
lineParam.relativeMode = (cmbReference.Text == "管顶") ? 0 : 1;
lineParam.lineColor = btnPipelineColor.BackColor;
- lineParam.transparency=Convert.ToByte(ComboboxRansparency.Value);
+ lineParam.transparency = Convert.ToByte(ComboboxRansparency.Value);
lineParam.cornerSliceAngle = Convert.ToDouble(textBoxCornerSliceAngle.Text);
- lineParam.sliceNum=Convert.ToInt32(txtSlice.Text);
+ lineParam.sliceNum = Convert.ToInt32(txtSlice.Text);
lineParam.channelWidth = comboBoxExWidth.Text;
lineParam.channelHeight = comboBoxExHeight.Text;
- lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update,
- checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam);
+ if (txtModelLayer.Text != "传感设备图层")
+ lineBuilder(layer, lineParam);
+ else
+ gxLineBuilder(layer, lineParam);
+
addLayerToGlobeControl(lineParam.layerName);
//this.DialogResult = DialogResult.OK;
MessageBox.Show("入库完成!", "提示");
@@ -167,6 +163,33 @@
}
}
+ bool getValidateResult(GSOLayer layer)
+ {
+ FieldValidate fieldValidate = FieldValidateFactory.Create(ValidateConfig.LoadConfig(),
+ getEnumValidateType());
+
+ if (fieldValidate.Validate(layer)) return true;
+ DateTime dt = DateTime.Now;
+ string logFilePath = Application.StartupPath + "\\log\\" + dt.Year + "\\" + dt.Year + dt.Month +
+ "\\" + dt.Year + dt.Month + dt.Day + ".txt";
+ MessageBox.Show("选择的数据不符合数据规范,详情见日志" + logFilePath, "提示");
+ return false;
+ }
+
+ void lineBuilder(GSOLayer layer,LineParam lineParam)
+ {
+ ModelBuilder lineBuilder = new LineBuilder(datasource);
+ lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update,
+ checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam);
+ }
+
+ void gxLineBuilder(GSOLayer layer, LineParam lineParam)
+ {
+ ModelBuilder lineBuilder = new GXBuilder(datasource);
+ lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update,
+ checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam);
+ }
+
private EnumValidateType getEnumValidateType()
{
if (comboBoxExWidth.Text != "")
diff --git a/LSPipeline.csproj b/LSPipeline.csproj
index 477d8ba..599b492 100644
--- a/LSPipeline.csproj
+++ b/LSPipeline.csproj
@@ -222,6 +222,7 @@
FrmUpdateLayerFieldValues.cs
+
Form
@@ -243,6 +244,7 @@
+
True
diff --git a/LSPipeline.suo b/LSPipeline.suo
index c930f27..92b5d7d 100644
--- a/LSPipeline.suo
+++ b/LSPipeline.suo
Binary files differ
diff --git a/OracleUtils.cs b/OracleUtils.cs
new file mode 100644
index 0000000..c79d316
--- /dev/null
+++ b/OracleUtils.cs
@@ -0,0 +1,1271 @@
+using System;
+using System.Collections;
+using System.Data;
+using System.Data.OracleClient;
+
+namespace WorldGIS
+{
+ public abstract class OracleUtils
+ {
+ // Read the connection strings from the configuration file
+ //public static readonly string ConnectionString = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
+ public static readonly string ConnectionString = @"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=" + Utility.DBServer
+ + ")(PORT=1521))(CONNECT_DATA=(SID=" + Utility.Database
+ + ")));Persist Security Info=True;User Id=" + Utility.UserID
+ + "; Password=" + Utility.DBPassword + "";
+
+ //Create a hashtable for the parameter cached
+ private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());
+
+ #region private utility methods & constructors
+
+ //Since this class provides only static methods, make the default constructor private to prevent
+ //instances from being created with "new SqlHelper()".
+ private OracleUtils() { }
+
+ ///
+ /// This method is used to attach array of SqlParameters to a SqlCommand.
+ ///
+ /// This method will assign a value of DbNull to any parameter with a direction of
+ /// InputOutput and a value of null.
+ ///
+ /// This behavior will prevent default values from being used, but
+ /// this will be the less common case than an intended pure output parameter (derived as InputOutput)
+ /// where the user provided no input value.
+ ///
+ /// The command to which the parameters will be added
+ /// an array of SqlParameters tho be added to command
+ private static void AttachParameters(OracleCommand command, OracleParameter[] commandParameters)
+ {
+ foreach (OracleParameter p in commandParameters)
+ {
+ //check for derived output value with no value assigned
+ if ((p.Direction == ParameterDirection.InputOutput) && (p.Value == null))
+ {
+ p.Value = DBNull.Value;
+ }
+
+ command.Parameters.Add(p);
+ }
+ }
+
+ ///
+ /// This method assigns an array of values to an array of SqlParameters.
+ ///
+ /// array of SqlParameters to be assigned values
+ /// array of objects holding the values to be assigned
+ private static void AssignParameterValues(OracleParameter[] commandParameters, object[] parameterValues)
+ {
+ if ((commandParameters == null) || (parameterValues == null))
+ {
+ //do nothing if we get no data
+ return;
+ }
+
+ // we must have the same number of values as we pave parameters to put them in
+ if (commandParameters.Length != parameterValues.Length)
+ {
+ throw new ArgumentException("Parameter count does not match Parameter Value count.");
+ }
+
+ //iterate through the SqlParameters, assigning the values from the corresponding position in the
+ //value array
+ for (int i = 0, j = commandParameters.Length; i < j; i++)
+ {
+ commandParameters[i].Value = parameterValues[i];
+ }
+ }
+
+ ///
+ /// This method opens (if necessary) and assigns a connection, transaction, command type and parameters
+ /// to the provided command.
+ ///
+ /// the SqlCommand to be prepared
+ /// a valid OracleConnection, on which to execute this command
+ /// a valid OracleTransaction, or 'null'
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParameters to be associated with the command or 'null' if no parameters are required
+ private static void PrepareCommand(OracleCommand command, OracleConnection connection, OracleTransaction transaction, CommandType commandType, string commandText, OracleParameter[] commandParameters)
+ {
+ //if the provided connection is not open, we will open it
+ if (connection.State != ConnectionState.Open)
+ {
+ connection.Open();
+ }
+
+ //associate the connection with the command
+ command.Connection = connection;
+
+ //set the command text (stored procedure name or SQL statement)
+ command.CommandText = commandText;
+
+ //if we were provided a transaction, assign it.
+ if (transaction != null)
+ {
+ command.Transaction = transaction;
+ }
+
+ //set the command type
+ command.CommandType = commandType;
+
+ //attach the command parameters if they are provided
+ if (commandParameters != null)
+ {
+ AttachParameters(command, commandParameters);
+ }
+ }
+
+
+ #endregion private utility methods & constructors
+
+ #region ExecuteNonQuery
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset and takes no parameters) against the database specified in
+ /// the connection string.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders");
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteNonQuery(connectionString, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset) against the database specified in the connection string
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create & open a OracleConnection, and dispose of it after we are done.
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ {
+ cn.Open();
+
+ //call the overload that takes a connection in place of the connection string
+ return ExecuteNonQuery(cn, commandType, commandText, commandParameters);
+ }
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns no resultset) against the database specified in
+ /// the connection string using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(connString, "PublishOrders", 24, 36);
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored prcedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(string connectionString, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset and takes no parameters) against the provided OracleConnection.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(conn, CommandType.StoredProcedure, "PublishOrders");
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleConnection connection, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteNonQuery(connection, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset) against the specified OracleConnection
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(conn, CommandType.StoredProcedure, "PublishOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, connection, null, commandType, commandText, commandParameters);
+
+ //finally, execute the command.
+ int retval = cmd.ExecuteNonQuery();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+ }
+
+ public static int ExecuteNonQueryWithTimeout(string connectionString, CommandType commandType, string commandText, int cmdTimeout)
+ {
+ //create a command and prepare it for execution
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ {
+ cn.Open();
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, cn, null, commandType, commandText, null);
+ cmd.CommandTimeout = cmdTimeout;
+ //finally, execute the command.
+ int retval = cmd.ExecuteNonQuery();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+ }
+
+ }
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns no resultset) against the specified OracleConnection
+ /// using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(conn, "PublishOrders", 24, 36);
+ ///
+ /// a valid OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleConnection connection, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteNonQuery(connection, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteNonQuery(connection, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset and takes no parameters) against the provided OracleTransaction.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "PublishOrders");
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleTransaction transaction, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteNonQuery(transaction, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset) against the specified OracleTransaction
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);
+
+ //finally, execute the command.
+ int retval = cmd.ExecuteNonQuery();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns no resultset) against the specified
+ /// OracleTransaction using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(conn, trans, "PublishOrders", 24, 36);
+ ///
+ /// a valid OracleTransaction
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleTransaction transaction, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName);
+ }
+
+
+ #endregion ExecuteNonQuery
+
+ #region ExecuteDataSet
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the database specified in
+ /// the connection string.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(connString, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(string connectionString, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteDataset(connectionString, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the database specified in the connection string
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(connString, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create & open a OracleConnection, and dispose of it after we are done.
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ {
+ cn.Open();
+
+ //call the overload that takes a connection in place of the connection string
+ return ExecuteDataset(cn, commandType, commandText, commandParameters);
+ }
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the database specified in
+ /// the connection string using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(connString, "GetOrders", 24, 36);
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(string connectionString, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteDataset(connectionString, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteDataset(connectionString, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided OracleConnection.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(conn, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleConnection connection, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteDataset(connection, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the specified OracleConnection
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(conn, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, connection, null, commandType, commandText, commandParameters);
+
+ //create the DataAdapter & DataSet
+ OracleDataAdapter da = new OracleDataAdapter(cmd);
+ DataSet ds = new DataSet();
+
+ //fill the DataSet using default values for DataTable names, etc.
+ da.Fill(ds);
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+
+ //return the dataset
+ return ds;
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified OracleConnection
+ /// using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(conn, "GetOrders", 24, 36);
+ ///
+ /// a valid OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleConnection connection, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteDataset(connection, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteDataset(connection, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided OracleTransaction.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(trans, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleTransaction transaction, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteDataset(transaction, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the specified OracleTransaction
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(trans, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);
+
+ //create the DataAdapter & DataSet
+ OracleDataAdapter da = new OracleDataAdapter(cmd);
+ DataSet ds = new DataSet();
+
+ //fill the DataSet using default values for DataTable names, etc.
+ da.Fill(ds);
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+
+ //return the dataset
+ return ds;
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified
+ /// OracleTransaction using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(trans, "GetOrders", 24, 36);
+ ///
+ /// a valid OracleTransaction
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleTransaction transaction, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteDataset(transaction, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteDataset(transaction, CommandType.StoredProcedure, spName);
+ }
+
+ #endregion ExecuteDataSet
+
+ #region ExecuteReader
+
+ ///
+ /// this enum is used to indicate whether the connection was provided by the caller, or created by SqlHelper, so that
+ /// we can set the appropriate CommandBehavior when calling ExecuteReader()
+ ///
+ private enum OracleConnectionOwnership
+ {
+ /// Connection is owned and managed by SqlHelper
+ Internal,
+ /// Connection is owned and managed by the caller
+ External
+ }
+
+ ///
+ /// Create and prepare a SqlCommand, and call ExecuteReader with the appropriate CommandBehavior.
+ ///
+ ///
+ /// If we created and opened the connection, we want the connection to be closed when the DataReader is closed.
+ ///
+ /// If the caller provided the connection, we want to leave it to them to manage.
+ ///
+ /// a valid OracleConnection, on which to execute this command
+ /// a valid OracleTransaction, or 'null'
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParameters to be associated with the command or 'null' if no parameters are required
+ /// indicates whether the connection parameter was provided by the caller, or created by SqlHelper
+ /// SqlDataReader containing the results of the command
+ private static OracleDataReader ExecuteReader(OracleConnection connection, OracleTransaction transaction, CommandType commandType, string commandText, OracleParameter[] commandParameters, OracleConnectionOwnership connectionOwnership)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, connection, transaction, commandType, commandText, commandParameters);
+
+ //create a reader
+ OracleDataReader dr;
+
+ // call ExecuteReader with the appropriate CommandBehavior
+ if (connectionOwnership == OracleConnectionOwnership.External)
+ {
+ dr = cmd.ExecuteReader();
+ }
+ else
+ {
+ dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
+
+ }
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+
+ return dr;
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the database specified in
+ /// the connection string.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(connString, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(string connectionString, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteReader(connectionString, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the database specified in the connection string
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(connString, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create & open a OracleConnection
+ OracleConnection cn = new OracleConnection(connectionString);
+ cn.Open();
+
+ try
+ {
+ //call the private overload that takes an internally owned connection in place of the connection string
+ return ExecuteReader(cn, null, commandType, commandText, commandParameters, OracleConnectionOwnership.Internal);
+ }
+ catch
+ {
+ //if we fail to return the SqlDatReader, we need to close the connection ourselves
+ cn.Close();
+ throw;
+ }
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the database specified in
+ /// the connection string using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(connString, "GetOrders", 24, 36);
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(string connectionString, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteReader(connectionString, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteReader(connectionString, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided OracleConnection.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(conn, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleConnection connection, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteReader(connection, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the specified OracleConnection
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(conn, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //pass through the call to the private overload using a null transaction value and an externally owned connection
+ return ExecuteReader(connection, null, commandType, commandText, commandParameters, OracleConnectionOwnership.External);
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified OracleConnection
+ /// using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(conn, "GetOrders", 24, 36);
+ ///
+ /// a valid OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleConnection connection, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);
+
+ AssignParameterValues(commandParameters, parameterValues);
+
+ return ExecuteReader(connection, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteReader(connection, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided OracleTransaction.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(trans, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleTransaction transaction, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteReader(transaction, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the specified OracleTransaction
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(trans, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //pass through to private overload, indicating that the connection is owned by the caller
+ return ExecuteReader(transaction.Connection, transaction, commandType, commandText, commandParameters, OracleConnectionOwnership.External);
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified
+ /// OracleTransaction using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(trans, "GetOrders", 24, 36);
+ ///
+ /// a valid OracleTransaction
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleTransaction transaction, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);
+
+ AssignParameterValues(commandParameters, parameterValues);
+
+ return ExecuteReader(transaction, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteReader(transaction, CommandType.StoredProcedure, spName);
+ }
+
+ #endregion ExecuteReader
+
+ #region ExecuteScalar
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset and takes no parameters) against the database specified in
+ /// the connection string.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(connString, CommandType.StoredProcedure, "GetOrderCount");
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(string connectionString, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteScalar(connectionString, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset) against the database specified in the connection string
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(connString, CommandType.StoredProcedure, "GetOrderCount", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create & open a OracleConnection, and dispose of it after we are done.
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ {
+ cn.Open();
+
+ //call the overload that takes a connection in place of the connection string
+ return ExecuteScalar(cn, commandType, commandText, commandParameters);
+ }
+ }
+
+ ///
+ /// Execute a stored procedure via a OracleCommand (that returns a 1x1 resultset) against the database specified in
+ /// the connection string using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(connString, "GetOrderCount", 24, 36);
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(string connectionString, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteScalar(connectionString, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteScalar(connectionString, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset and takes no parameters) against the provided OracleConnection.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(conn, CommandType.StoredProcedure, "GetOrderCount");
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleConnection connection, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteScalar(connection, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset) against the specified OracleConnection
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(conn, CommandType.StoredProcedure, "GetOrderCount", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, connection, null, commandType, commandText, commandParameters);
+
+ //execute the command & return the results
+ object retval = cmd.ExecuteScalar();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+
+ }
+
+ ///
+ /// Execute a stored procedure via a OracleCommand (that returns a 1x1 resultset) against the specified OracleConnection
+ /// using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(conn, "GetOrderCount", 24, 36);
+ ///
+ /// a valid OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleConnection connection, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteScalar(connection, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteScalar(connection, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset and takes no parameters) against the provided OracleTransaction.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(trans, CommandType.StoredProcedure, "GetOrderCount");
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleTransaction transaction, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteScalar(transaction, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset) against the specified OracleTransaction
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(trans, CommandType.StoredProcedure, "GetOrderCount", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);
+
+ //execute the command & return the results
+ object retval = cmd.ExecuteScalar();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+ }
+
+ ///
+ /// Execute a stored procedure via a OracleCommand (that returns a 1x1 resultset) against the specified
+ /// OracleTransaction using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(trans, "GetOrderCount", 24, 36);
+ ///
+ /// a valid OracleTransaction
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleTransaction transaction, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteScalar(transaction, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteScalar(transaction, CommandType.StoredProcedure, spName);
+ }
+
+ #endregion ExecuteScalar
+
+
+ }
+ ///
+ /// OracleHelperParameterCache provides functions to leverage a static cache of procedure parameters, and the
+ /// ability to discover parameters for stored procedures at run-time.
+ ///
+ ///
+
+ public sealed class OracleHelperParameterCache
+ {
+ #region private methods, variables, and constructors
+
+ //Since this class provides only static methods, make the default constructor private to prevent
+ //instances from being created with "new SqlHelperParameterCache()".
+ private OracleHelperParameterCache() { }
+
+ private static Hashtable paramCache = Hashtable.Synchronized(new Hashtable());
+
+ ///
+ /// resolve at run time the appropriate set of SqlParameters for a stored procedure
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// whether or not to include their return value parameter
+ ///
+ private static OracleParameter[] DiscoverSpParameterSet(string connectionString, string spName, bool includeReturnValueParameter)
+ {
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ using (OracleCommand cmd = new OracleCommand(spName, cn))
+ {
+ cn.Open();
+ cmd.CommandType = CommandType.StoredProcedure;
+ OracleCommandBuilder.DeriveParameters(cmd);
+
+ if (!includeReturnValueParameter)
+ {
+ cmd.Parameters.RemoveAt(0);
+ }
+
+ OracleParameter[] discoveredParameters = new OracleParameter[cmd.Parameters.Count]; ;
+
+ cmd.Parameters.CopyTo(discoveredParameters, 0);
+
+ return discoveredParameters;
+ }
+ }
+
+ //deep copy of cached OracleParameter array
+ private static OracleParameter[] CloneParameters(OracleParameter[] originalParameters)
+ {
+ OracleParameter[] clonedParameters = new OracleParameter[originalParameters.Length];
+
+ for (int i = 0, j = originalParameters.Length; i < j; i++)
+ {
+ clonedParameters[i] = (OracleParameter)((ICloneable)originalParameters[i]).Clone();
+ }
+
+ return clonedParameters;
+ }
+
+ #endregion private methods, variables, and constructors
+
+ #region caching functions
+
+ ///
+ /// add parameter array to the cache
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters to be cached
+ public static void CacheParameterSet(string connectionString, string commandText, params OracleParameter[] commandParameters)
+ {
+ string hashKey = connectionString + ":" + commandText;
+
+ paramCache[hashKey] = commandParameters;
+ }
+
+ ///
+ /// retrieve a parameter array from the cache
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters
+ public static OracleParameter[] GetCachedParameterSet(string connectionString, string commandText)
+ {
+ string hashKey = connectionString + ":" + commandText;
+
+ OracleParameter[] cachedParameters = (OracleParameter[])paramCache[hashKey];
+
+ if (cachedParameters == null)
+ {
+ return null;
+ }
+ return CloneParameters(cachedParameters);
+ }
+
+ #endregion caching functions
+
+ #region Parameter Discovery Functions
+
+ ///
+ /// Retrieves the set of SqlParameters appropriate for the stored procedure
+ ///
+ ///
+ /// This method will query the database for this information, and then store it in a cache for future requests.
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// an array of SqlParameters
+ public static OracleParameter[] GetSpParameterSet(string connectionString, string spName)
+ {
+ return GetSpParameterSet(connectionString, spName, false);
+ }
+
+ ///
+ /// Retrieves the set of SqlParameters appropriate for the stored procedure
+ ///
+ ///
+ /// This method will query the database for this information, and then store it in a cache for future requests.
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// a bool value indicating whether the return value parameter should be included in the results
+ /// an array of SqlParameters
+ public static OracleParameter[] GetSpParameterSet(string connectionString, string spName, bool includeReturnValueParameter)
+ {
+ string hashKey = connectionString + ":" + spName + (includeReturnValueParameter ? ":include ReturnValue Parameter" : "");
+
+ OracleParameter[] cachedParameters;
+
+ cachedParameters = (OracleParameter[])paramCache[hashKey];
+
+ if (cachedParameters == null)
+ {
+ cachedParameters = (OracleParameter[])(paramCache[hashKey] = DiscoverSpParameterSet(connectionString, spName, includeReturnValueParameter));
+ }
+
+ return CloneParameters(cachedParameters);
+ }
+
+ #endregion Parameter Discovery Functions
+ }
+}
diff --git a/Utility.cs b/Utility.cs
index 1429fd9..4e64d66 100644
--- a/Utility.cs
+++ b/Utility.cs
@@ -17,6 +17,11 @@
{
public class Utility
{
+ public static string DBServer;
+ public static string Database;
+ public static string UserID;
+ public static string DBPassword;
+
public static void SetBallons(GSOBalloon featureTooltip,GSOBalloonEx balloonEx)
{
featureTooltip.CacheFilePath = Path.GetDirectoryName(Application.ExecutablePath) + "/GeoScene/Globe/Temp";
diff --git a/bin/x64/Debug/LSPipeline.exe b/bin/x64/Debug/LSPipeline.exe
index 833a5e5..76f838b 100644
--- a/bin/x64/Debug/LSPipeline.exe
+++ b/bin/x64/Debug/LSPipeline.exe
Binary files differ
diff --git a/bin/x64/Debug/LSPipeline.pdb b/bin/x64/Debug/LSPipeline.pdb
index 245e727..28c81dc 100644
--- a/bin/x64/Debug/LSPipeline.pdb
+++ b/bin/x64/Debug/LSPipeline.pdb
Binary files differ
diff --git a/bin/x64/Debug/databaseConfigOracle.xml b/bin/x64/Debug/databaseConfigOracle.xml
index 7e48b08..94be70c 100644
--- a/bin/x64/Debug/databaseConfigOracle.xml
+++ b/bin/x64/Debug/databaseConfigOracle.xml
@@ -2,7 +2,7 @@
True
192.168.0.203
- szhtdb2
- release
- release
+ eydb2
+ scott
+ scott
\ No newline at end of file
diff --git a/bin/x64/Debug/log.txt b/bin/x64/Debug/log.txt
index 5236cc6..73bcf38 100644
--- a/bin/x64/Debug/log.txt
+++ b/bin/x64/Debug/log.txt
@@ -27704,3 +27704,75 @@
exception over ------------------------------------------------------------
+
+ exception begin -----------------2016/12/2 9:55:40---------------------
+
+
+
+ e.Message:输入字符串的格式不正确。
+
+ e.Source:mscorlib
+
+ e.TargetSite:Double ParseDouble(System.String, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo)
+
+ e.StackTrace: 在 System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
+ 在 System.Double.Parse(String s, IFormatProvider provider)
+ 在 WorldGIS.CtrlEntitySpaceInfo.positionChanged() 位置 D:\LSPipeline\UserControls\CtrlEntitySpaceInfo.cs:行号 113
+
+
+
+ exception over ------------------------------------------------------------
+
+ exception begin -----------------2016/12/2 9:55:41---------------------
+
+
+
+ e.Message:输入字符串的格式不正确。
+
+ e.Source:mscorlib
+
+ e.TargetSite:Double ParseDouble(System.String, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo)
+
+ e.StackTrace: 在 System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
+ 在 System.Double.Parse(String s, IFormatProvider provider)
+ 在 WorldGIS.CtrlEntitySpaceInfo.positionChanged() 位置 D:\LSPipeline\UserControls\CtrlEntitySpaceInfo.cs:行号 115
+
+
+
+ exception over ------------------------------------------------------------
+
+ exception begin -----------------2016/12/2 9:55:55---------------------
+
+
+
+ e.Message:输入字符串的格式不正确。
+
+ e.Source:mscorlib
+
+ e.TargetSite:Double ParseDouble(System.String, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo)
+
+ e.StackTrace: 在 System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
+ 在 System.Double.Parse(String s, IFormatProvider provider)
+ 在 WorldGIS.CtrlEntitySpaceInfo.positionChanged() 位置 D:\LSPipeline\UserControls\CtrlEntitySpaceInfo.cs:行号 113
+
+
+
+ exception over ------------------------------------------------------------
+
+ exception begin -----------------2016/12/2 9:55:56---------------------
+
+
+
+ e.Message:输入字符串的格式不正确。
+
+ e.Source:mscorlib
+
+ e.TargetSite:Double ParseDouble(System.String, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo)
+
+ e.StackTrace: 在 System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
+ 在 System.Double.Parse(String s, IFormatProvider provider)
+ 在 WorldGIS.CtrlEntitySpaceInfo.positionChanged() 位置 D:\LSPipeline\UserControls\CtrlEntitySpaceInfo.cs:行号 115
+
+
+
+ exception over ------------------------------------------------------------
diff --git a/obj/Debug/GenerateResource.read.1.tlog b/obj/Debug/GenerateResource.read.1.tlog
index b4c2526..95a0a19 100644
--- a/obj/Debug/GenerateResource.read.1.tlog
+++ b/obj/Debug/GenerateResource.read.1.tlog
Binary files differ
diff --git a/FrmDatabaseParaSettingOracle.cs b/FrmDatabaseParaSettingOracle.cs
index 18c5e99..6e97dfb 100644
--- a/FrmDatabaseParaSettingOracle.cs
+++ b/FrmDatabaseParaSettingOracle.cs
@@ -47,12 +47,15 @@
}
string serverIp = textBoxIP.Text.Trim();
+ /*
string hostName = System.Net.Dns.GetHostName();
if (serverIp == hostName || serverIp == "localhost"
|| serverIp == System.Net.Dns.GetHostAddresses(hostName).GetValue(2).ToString())
{
serverIp = "127.0.0.1";
}
+ * */
+
DateTime timeStart = DateTime.Now;
GSODataSource ds = globeControl1.Globe.DataManager.GetDataSourceByName(serverIp + "/" + textBoxDatabase.Text.Trim() + "_" + textBoxUser.Text.Trim());
if (ds == null)
@@ -83,7 +86,7 @@
connectParams.dataSourceName = ds.Name;
connectParams.databaseType = EnumDataSourceType.Oracle;
Utility.connectParamsOfDatabase.Add(connectParams);
-
+ setUtilityValue(connectParams);
WriteXML();
MessageBox.Show("连接Oracle数据库成功,用时:" + secondsConnectOracle.ToString() + "秒", "提示");
}
@@ -92,6 +95,14 @@
this.Close();
}
+ private void setUtilityValue(DatabaseConnectParams connectParams)
+ {
+ Utility.DBServer = connectParams.ip;
+ Utility.Database = connectParams.databaseName;
+ Utility.UserID = connectParams.userName;
+ Utility.DBPassword = connectParams.password;
+ }
+
private void ReadXML()
{
string strFileName = Path.GetDirectoryName(Application.ExecutablePath) + "/databaseConfigOracle.xml";
diff --git a/GXBuilder.cs b/GXBuilder.cs
new file mode 100644
index 0000000..b2ec9b2
--- /dev/null
+++ b/GXBuilder.cs
@@ -0,0 +1,187 @@
+using System;
+using System.Data;
+using System.Drawing;
+using System.Runtime.InteropServices;
+using GeoScene.Data;
+using GeoScene.Engine;
+using GeoScene.Globe;
+
+namespace WorldGIS
+{
+ public class GXBuilder : ModelBuilder
+ {
+ private static double diameter = 0.1;
+
+ public GXBuilder(GSODataSource ds)
+ : base(ds)
+ {
+
+ }
+
+ public override bool validate(GSOLayer layer)
+ {
+ return true;
+ }
+
+ ///
+ ///
+ ///
+ /// 追加或修改
+ /// 高程入库或埋深入库
+ ///
+ public override bool doBuild(EnumUpdateMode updateMode,
+ EnumBuildMode buildMode,
+ BaseParam param)
+ {
+ LineParam lineParam = param as LineParam;
+ GSOFeatureDataset newFeatureSet = ds.GetDatasetByName(lineParam.layerName) as GSOFeatureDataset;
+ if (newFeatureSet == null)
+ {
+ newFeatureSet = CreateDBFeatureDataset(layer, lineParam.layerName);
+ }
+ newFeatureSet.Open();
+ GSOFeatures features = layer.GetAllFeatures(true);
+ for (int i = 0; i < features.Length; i++)
+ {
+ GSOFeature f = features[i];
+ GSOGeoPolyline3D lineeee = f.Geometry as GSOGeoPolyline3D;
+ if (lineeee == null || lineeee.GetSpaceLength(true, 6378137) == 0)
+ {
+ LogHelper.Error("出现数据无法入库:" + f.ID);
+ continue;
+ }
+
+ GSOFeature newFeature = newFeatureSet.CreateFeature();
+
+ double radius = diameter; //创建光纤的半径
+ newFeature.Geometry = updateGemotry(f, lineParam, radius, buildMode);
+ newFeature.Geometry.Style = getPipeLineStyle(lineParam, f, radius);
+ newFeature.Name = f.GetFieldAsString(lineParam.uniqueIdFieldName);
+ setFeatureValueByShapeFeature(f, newFeature);
+ // newFeatureSet
+ if (newFeatureSet.GetFeatureByName(newFeature.Name, true).Length > 0)
+ {
+ if (!this.UpdateGXDevice(newFeatureSet.GetFeatureByName(newFeature.Name, true)[0],
+ newFeature))
+ {
+ LogHelper.Error("光纤设备更新失败:" + newFeature.Name+"\r\n");
+ }
+ continue;
+ }
+ newFeatureSet.AddFeature(newFeature);
+ if (!AddGXDevice(newFeature))
+ {
+ LogHelper.Error("光纤数据保存Alarm_Device失败:" + newFeature.Name+"\r\n");
+ }
+ }
+ newFeatureSet.Save();
+ newFeatureSet.Close();
+ return true;
+ }
+
+ private bool AddGXDevice(GSOFeature feature)
+ {
+ //保存数据到设备表
+ try
+ {
+ String deviceType = feature.GetValue("DEVICETYPE") == null
+ ? "" : feature.GetValue("DEVICETYPE").ToString();
+ String devCode = feature.GetValue("DEVICEID") == null
+ ? "" : feature.GetValue("DEVICEID").ToString();
+ String road = feature.GetValue("ROAD") == null
+ ? "" : feature.GetValue("ROAD").ToString();
+
+ //TODO LIST:
+ string sqlCount = "select dbid from alarm_device_type where" +
+ " typename = '" + deviceType + "'";
+ object dbid = OracleUtils.ExecuteScalar(OracleUtils.ConnectionString,
+ CommandType.Text, sqlCount);
+ if (dbid == null)
+ {
+ return false;
+ }
+ int deviceTypeId = int.Parse(dbid.ToString());
+ string sql = "Insert into alarm_device (DBID,ACTIVE,DEVCODE,DEVNAME,FACTORY," +
+ "INSTALLDATE,GAOCHENG,HEIGHT,LATITUDE,LONGTITUDE,DEVICETYPE_ID) " +
+ "values (SEQ_DEVICE_ID.NEXTVAL, 1, '" + devCode + "', '" + deviceType + devCode +
+ "', " + "'航天二院', " + "to_date('" + DateTime.Now.ToString() + "','yyyy/MM/dd hh24:mi::ss'), "
+ + "0, 0, 0, 0, " + deviceTypeId + ")";
+ OracleUtils.ExecuteNonQuery(OracleUtils.ConnectionString, CommandType.Text, sql);
+
+ }
+ catch (Exception e)
+ {
+ throw;
+ }
+ return true;
+ }
+
+ private bool UpdateGXDevice(GSOFeature feature, GSOFeature newFeature)
+ {
+ String deviceType = newFeature.GetValue("DEVICETYPE") == null
+ ? "" : newFeature.GetValue("DEVICETYPE").ToString();
+ String devCode = newFeature.GetValue("DEVICEID") == null
+ ? "" : newFeature.GetValue("DEVICEID").ToString();
+ String road = newFeature.GetValue("ROAD") == null
+ ? "" : newFeature.GetValue("ROAD").ToString();
+
+ feature.Geometry = newFeature.Geometry.Clone();
+ this.setFeatureValueByShapeFeature(newFeature,feature);
+ // feature.Dataset.Save();
+
+ string sqlCount = "select dbid from alarm_device_type where" +
+ " typename = '" + deviceType + "'";
+ object dbid = OracleUtils.ExecuteScalar(OracleUtils.ConnectionString,
+ CommandType.Text, sqlCount);
+ if (dbid == null)
+ {
+ return false;
+ }
+ int deviceTypeId = int.Parse(dbid.ToString());
+
+ string sql = "update alarm_device set FACTORY='" + road +
+ "', DEVICETYPE_ID='" + deviceTypeId +
+ "', DEVNAME='"+deviceType+devCode+"' "+
+ "where devcode='" + devCode + "'";
+ OracleUtils.ExecuteNonQuery(OracleUtils.ConnectionString, CommandType.Text, sql);
+ return true;
+ }
+
+ private GSOLineStyle3D getPipeLineStyle(LineParam lineParam, GSOFeature f, double radius)
+ {
+ GSOPipeLineStyle3D style0 = new GSOPipeLineStyle3D();
+ style0.LineColor = Color.FromArgb(lineParam.transparency, lineParam.lineColor);
+ style0.Slice = lineParam.sliceNum;
+ style0.CornerSliceAngle = lineParam.cornerSliceAngle;
+ style0.Radius = radius;
+ return style0;
+ }
+
+ private GSOGeometry updateGemotry(GSOFeature f, LineParam lineParam, double radius, EnumBuildMode buildMode)
+ {
+
+ f.Geometry.AltitudeMode = (buildMode.Equals(EnumBuildMode.Alititude)) ? EnumAltitudeMode.RelativeToGround : EnumAltitudeMode.Absolute;
+
+ GSOGeoPolyline3D line = f.Geometry as GSOGeoPolyline3D;
+ if (line == null)
+ {
+ return null; //log4net 记录错误处理
+ }
+
+ double deep1 = 0;
+ double deep2 = 0;
+
+ GSOPoint3ds pt3ds = new GSOPoint3ds();
+ for (int n = 0; n < line[0].Count; n++)
+ {
+ GSOPoint3d pt3d = line[0][n];
+ pt3d.Z = 0;
+
+ pt3ds.Add(pt3d);
+ }
+ line[0] = pt3ds;
+ return line;
+ }
+
+ }
+}
diff --git a/HTForms/FrmPipelineModelDataBase.cs b/HTForms/FrmPipelineModelDataBase.cs
index 84a2d7b..3076bdd 100644
--- a/HTForms/FrmPipelineModelDataBase.cs
+++ b/HTForms/FrmPipelineModelDataBase.cs
@@ -91,6 +91,7 @@
}
else
datasource = ds;
+
if (comboBoxExLayer.Text.Trim() == "")
{
MessageBox.Show("请选择一个图层文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
@@ -126,20 +127,12 @@
comboBoxExLayer.Text));
if (layer == null) return;
- FieldValidate fieldValidate = FieldValidateFactory.Create(ValidateConfig.LoadConfig(),
- getEnumValidateType());
-
- if (!fieldValidate.Validate(layer))
+ if (txtModelLayer.Text != "传感设备图层")
{
- DateTime dt=DateTime.Now;
- string logFilePath = Application.StartupPath + "\\log\\" + dt.Year + "\\" + dt.Year + dt.Month + "\\" + dt.Year +
- dt.Month + dt.Day + ".txt";
- MessageBox.Show("选择的数据不符合数据规范,详情见日志" + logFilePath, "提示");
- return;
+ if (!getValidateResult(layer))
+ return;
}
- ModelBuilder lineBuilder = new LineBuilder(datasource);
-
LineParam lineParam = new LineParam();
lineParam.layerName = txtModelLayer.Text;
lineParam.uniqueIdFieldName = cmbID.Text;
@@ -149,14 +142,17 @@
lineParam.diameterFieldName = cmbRadius.Text;
lineParam.relativeMode = (cmbReference.Text == "管顶") ? 0 : 1;
lineParam.lineColor = btnPipelineColor.BackColor;
- lineParam.transparency=Convert.ToByte(ComboboxRansparency.Value);
+ lineParam.transparency = Convert.ToByte(ComboboxRansparency.Value);
lineParam.cornerSliceAngle = Convert.ToDouble(textBoxCornerSliceAngle.Text);
- lineParam.sliceNum=Convert.ToInt32(txtSlice.Text);
+ lineParam.sliceNum = Convert.ToInt32(txtSlice.Text);
lineParam.channelWidth = comboBoxExWidth.Text;
lineParam.channelHeight = comboBoxExHeight.Text;
- lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update,
- checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam);
+ if (txtModelLayer.Text != "传感设备图层")
+ lineBuilder(layer, lineParam);
+ else
+ gxLineBuilder(layer, lineParam);
+
addLayerToGlobeControl(lineParam.layerName);
//this.DialogResult = DialogResult.OK;
MessageBox.Show("入库完成!", "提示");
@@ -167,6 +163,33 @@
}
}
+ bool getValidateResult(GSOLayer layer)
+ {
+ FieldValidate fieldValidate = FieldValidateFactory.Create(ValidateConfig.LoadConfig(),
+ getEnumValidateType());
+
+ if (fieldValidate.Validate(layer)) return true;
+ DateTime dt = DateTime.Now;
+ string logFilePath = Application.StartupPath + "\\log\\" + dt.Year + "\\" + dt.Year + dt.Month +
+ "\\" + dt.Year + dt.Month + dt.Day + ".txt";
+ MessageBox.Show("选择的数据不符合数据规范,详情见日志" + logFilePath, "提示");
+ return false;
+ }
+
+ void lineBuilder(GSOLayer layer,LineParam lineParam)
+ {
+ ModelBuilder lineBuilder = new LineBuilder(datasource);
+ lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update,
+ checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam);
+ }
+
+ void gxLineBuilder(GSOLayer layer, LineParam lineParam)
+ {
+ ModelBuilder lineBuilder = new GXBuilder(datasource);
+ lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update,
+ checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam);
+ }
+
private EnumValidateType getEnumValidateType()
{
if (comboBoxExWidth.Text != "")
diff --git a/LSPipeline.csproj b/LSPipeline.csproj
index 477d8ba..599b492 100644
--- a/LSPipeline.csproj
+++ b/LSPipeline.csproj
@@ -222,6 +222,7 @@
FrmUpdateLayerFieldValues.cs
+
Form
@@ -243,6 +244,7 @@
+
True
diff --git a/LSPipeline.suo b/LSPipeline.suo
index c930f27..92b5d7d 100644
--- a/LSPipeline.suo
+++ b/LSPipeline.suo
Binary files differ
diff --git a/OracleUtils.cs b/OracleUtils.cs
new file mode 100644
index 0000000..c79d316
--- /dev/null
+++ b/OracleUtils.cs
@@ -0,0 +1,1271 @@
+using System;
+using System.Collections;
+using System.Data;
+using System.Data.OracleClient;
+
+namespace WorldGIS
+{
+ public abstract class OracleUtils
+ {
+ // Read the connection strings from the configuration file
+ //public static readonly string ConnectionString = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
+ public static readonly string ConnectionString = @"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=" + Utility.DBServer
+ + ")(PORT=1521))(CONNECT_DATA=(SID=" + Utility.Database
+ + ")));Persist Security Info=True;User Id=" + Utility.UserID
+ + "; Password=" + Utility.DBPassword + "";
+
+ //Create a hashtable for the parameter cached
+ private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());
+
+ #region private utility methods & constructors
+
+ //Since this class provides only static methods, make the default constructor private to prevent
+ //instances from being created with "new SqlHelper()".
+ private OracleUtils() { }
+
+ ///
+ /// This method is used to attach array of SqlParameters to a SqlCommand.
+ ///
+ /// This method will assign a value of DbNull to any parameter with a direction of
+ /// InputOutput and a value of null.
+ ///
+ /// This behavior will prevent default values from being used, but
+ /// this will be the less common case than an intended pure output parameter (derived as InputOutput)
+ /// where the user provided no input value.
+ ///
+ /// The command to which the parameters will be added
+ /// an array of SqlParameters tho be added to command
+ private static void AttachParameters(OracleCommand command, OracleParameter[] commandParameters)
+ {
+ foreach (OracleParameter p in commandParameters)
+ {
+ //check for derived output value with no value assigned
+ if ((p.Direction == ParameterDirection.InputOutput) && (p.Value == null))
+ {
+ p.Value = DBNull.Value;
+ }
+
+ command.Parameters.Add(p);
+ }
+ }
+
+ ///
+ /// This method assigns an array of values to an array of SqlParameters.
+ ///
+ /// array of SqlParameters to be assigned values
+ /// array of objects holding the values to be assigned
+ private static void AssignParameterValues(OracleParameter[] commandParameters, object[] parameterValues)
+ {
+ if ((commandParameters == null) || (parameterValues == null))
+ {
+ //do nothing if we get no data
+ return;
+ }
+
+ // we must have the same number of values as we pave parameters to put them in
+ if (commandParameters.Length != parameterValues.Length)
+ {
+ throw new ArgumentException("Parameter count does not match Parameter Value count.");
+ }
+
+ //iterate through the SqlParameters, assigning the values from the corresponding position in the
+ //value array
+ for (int i = 0, j = commandParameters.Length; i < j; i++)
+ {
+ commandParameters[i].Value = parameterValues[i];
+ }
+ }
+
+ ///
+ /// This method opens (if necessary) and assigns a connection, transaction, command type and parameters
+ /// to the provided command.
+ ///
+ /// the SqlCommand to be prepared
+ /// a valid OracleConnection, on which to execute this command
+ /// a valid OracleTransaction, or 'null'
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParameters to be associated with the command or 'null' if no parameters are required
+ private static void PrepareCommand(OracleCommand command, OracleConnection connection, OracleTransaction transaction, CommandType commandType, string commandText, OracleParameter[] commandParameters)
+ {
+ //if the provided connection is not open, we will open it
+ if (connection.State != ConnectionState.Open)
+ {
+ connection.Open();
+ }
+
+ //associate the connection with the command
+ command.Connection = connection;
+
+ //set the command text (stored procedure name or SQL statement)
+ command.CommandText = commandText;
+
+ //if we were provided a transaction, assign it.
+ if (transaction != null)
+ {
+ command.Transaction = transaction;
+ }
+
+ //set the command type
+ command.CommandType = commandType;
+
+ //attach the command parameters if they are provided
+ if (commandParameters != null)
+ {
+ AttachParameters(command, commandParameters);
+ }
+ }
+
+
+ #endregion private utility methods & constructors
+
+ #region ExecuteNonQuery
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset and takes no parameters) against the database specified in
+ /// the connection string.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders");
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteNonQuery(connectionString, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset) against the database specified in the connection string
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create & open a OracleConnection, and dispose of it after we are done.
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ {
+ cn.Open();
+
+ //call the overload that takes a connection in place of the connection string
+ return ExecuteNonQuery(cn, commandType, commandText, commandParameters);
+ }
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns no resultset) against the database specified in
+ /// the connection string using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(connString, "PublishOrders", 24, 36);
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored prcedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(string connectionString, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset and takes no parameters) against the provided OracleConnection.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(conn, CommandType.StoredProcedure, "PublishOrders");
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleConnection connection, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteNonQuery(connection, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset) against the specified OracleConnection
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(conn, CommandType.StoredProcedure, "PublishOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, connection, null, commandType, commandText, commandParameters);
+
+ //finally, execute the command.
+ int retval = cmd.ExecuteNonQuery();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+ }
+
+ public static int ExecuteNonQueryWithTimeout(string connectionString, CommandType commandType, string commandText, int cmdTimeout)
+ {
+ //create a command and prepare it for execution
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ {
+ cn.Open();
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, cn, null, commandType, commandText, null);
+ cmd.CommandTimeout = cmdTimeout;
+ //finally, execute the command.
+ int retval = cmd.ExecuteNonQuery();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+ }
+
+ }
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns no resultset) against the specified OracleConnection
+ /// using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(conn, "PublishOrders", 24, 36);
+ ///
+ /// a valid OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleConnection connection, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteNonQuery(connection, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteNonQuery(connection, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset and takes no parameters) against the provided OracleTransaction.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "PublishOrders");
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleTransaction transaction, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteNonQuery(transaction, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset) against the specified OracleTransaction
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);
+
+ //finally, execute the command.
+ int retval = cmd.ExecuteNonQuery();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns no resultset) against the specified
+ /// OracleTransaction using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(conn, trans, "PublishOrders", 24, 36);
+ ///
+ /// a valid OracleTransaction
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleTransaction transaction, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName);
+ }
+
+
+ #endregion ExecuteNonQuery
+
+ #region ExecuteDataSet
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the database specified in
+ /// the connection string.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(connString, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(string connectionString, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteDataset(connectionString, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the database specified in the connection string
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(connString, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create & open a OracleConnection, and dispose of it after we are done.
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ {
+ cn.Open();
+
+ //call the overload that takes a connection in place of the connection string
+ return ExecuteDataset(cn, commandType, commandText, commandParameters);
+ }
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the database specified in
+ /// the connection string using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(connString, "GetOrders", 24, 36);
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(string connectionString, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteDataset(connectionString, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteDataset(connectionString, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided OracleConnection.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(conn, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleConnection connection, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteDataset(connection, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the specified OracleConnection
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(conn, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, connection, null, commandType, commandText, commandParameters);
+
+ //create the DataAdapter & DataSet
+ OracleDataAdapter da = new OracleDataAdapter(cmd);
+ DataSet ds = new DataSet();
+
+ //fill the DataSet using default values for DataTable names, etc.
+ da.Fill(ds);
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+
+ //return the dataset
+ return ds;
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified OracleConnection
+ /// using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(conn, "GetOrders", 24, 36);
+ ///
+ /// a valid OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleConnection connection, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteDataset(connection, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteDataset(connection, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided OracleTransaction.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(trans, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleTransaction transaction, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteDataset(transaction, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the specified OracleTransaction
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(trans, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);
+
+ //create the DataAdapter & DataSet
+ OracleDataAdapter da = new OracleDataAdapter(cmd);
+ DataSet ds = new DataSet();
+
+ //fill the DataSet using default values for DataTable names, etc.
+ da.Fill(ds);
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+
+ //return the dataset
+ return ds;
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified
+ /// OracleTransaction using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(trans, "GetOrders", 24, 36);
+ ///
+ /// a valid OracleTransaction
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleTransaction transaction, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteDataset(transaction, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteDataset(transaction, CommandType.StoredProcedure, spName);
+ }
+
+ #endregion ExecuteDataSet
+
+ #region ExecuteReader
+
+ ///
+ /// this enum is used to indicate whether the connection was provided by the caller, or created by SqlHelper, so that
+ /// we can set the appropriate CommandBehavior when calling ExecuteReader()
+ ///
+ private enum OracleConnectionOwnership
+ {
+ /// Connection is owned and managed by SqlHelper
+ Internal,
+ /// Connection is owned and managed by the caller
+ External
+ }
+
+ ///
+ /// Create and prepare a SqlCommand, and call ExecuteReader with the appropriate CommandBehavior.
+ ///
+ ///
+ /// If we created and opened the connection, we want the connection to be closed when the DataReader is closed.
+ ///
+ /// If the caller provided the connection, we want to leave it to them to manage.
+ ///
+ /// a valid OracleConnection, on which to execute this command
+ /// a valid OracleTransaction, or 'null'
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParameters to be associated with the command or 'null' if no parameters are required
+ /// indicates whether the connection parameter was provided by the caller, or created by SqlHelper
+ /// SqlDataReader containing the results of the command
+ private static OracleDataReader ExecuteReader(OracleConnection connection, OracleTransaction transaction, CommandType commandType, string commandText, OracleParameter[] commandParameters, OracleConnectionOwnership connectionOwnership)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, connection, transaction, commandType, commandText, commandParameters);
+
+ //create a reader
+ OracleDataReader dr;
+
+ // call ExecuteReader with the appropriate CommandBehavior
+ if (connectionOwnership == OracleConnectionOwnership.External)
+ {
+ dr = cmd.ExecuteReader();
+ }
+ else
+ {
+ dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
+
+ }
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+
+ return dr;
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the database specified in
+ /// the connection string.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(connString, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(string connectionString, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteReader(connectionString, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the database specified in the connection string
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(connString, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create & open a OracleConnection
+ OracleConnection cn = new OracleConnection(connectionString);
+ cn.Open();
+
+ try
+ {
+ //call the private overload that takes an internally owned connection in place of the connection string
+ return ExecuteReader(cn, null, commandType, commandText, commandParameters, OracleConnectionOwnership.Internal);
+ }
+ catch
+ {
+ //if we fail to return the SqlDatReader, we need to close the connection ourselves
+ cn.Close();
+ throw;
+ }
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the database specified in
+ /// the connection string using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(connString, "GetOrders", 24, 36);
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(string connectionString, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteReader(connectionString, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteReader(connectionString, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided OracleConnection.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(conn, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleConnection connection, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteReader(connection, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the specified OracleConnection
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(conn, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //pass through the call to the private overload using a null transaction value and an externally owned connection
+ return ExecuteReader(connection, null, commandType, commandText, commandParameters, OracleConnectionOwnership.External);
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified OracleConnection
+ /// using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(conn, "GetOrders", 24, 36);
+ ///
+ /// a valid OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleConnection connection, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);
+
+ AssignParameterValues(commandParameters, parameterValues);
+
+ return ExecuteReader(connection, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteReader(connection, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided OracleTransaction.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(trans, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleTransaction transaction, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteReader(transaction, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the specified OracleTransaction
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(trans, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //pass through to private overload, indicating that the connection is owned by the caller
+ return ExecuteReader(transaction.Connection, transaction, commandType, commandText, commandParameters, OracleConnectionOwnership.External);
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified
+ /// OracleTransaction using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(trans, "GetOrders", 24, 36);
+ ///
+ /// a valid OracleTransaction
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleTransaction transaction, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);
+
+ AssignParameterValues(commandParameters, parameterValues);
+
+ return ExecuteReader(transaction, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteReader(transaction, CommandType.StoredProcedure, spName);
+ }
+
+ #endregion ExecuteReader
+
+ #region ExecuteScalar
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset and takes no parameters) against the database specified in
+ /// the connection string.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(connString, CommandType.StoredProcedure, "GetOrderCount");
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(string connectionString, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteScalar(connectionString, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset) against the database specified in the connection string
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(connString, CommandType.StoredProcedure, "GetOrderCount", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create & open a OracleConnection, and dispose of it after we are done.
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ {
+ cn.Open();
+
+ //call the overload that takes a connection in place of the connection string
+ return ExecuteScalar(cn, commandType, commandText, commandParameters);
+ }
+ }
+
+ ///
+ /// Execute a stored procedure via a OracleCommand (that returns a 1x1 resultset) against the database specified in
+ /// the connection string using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(connString, "GetOrderCount", 24, 36);
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(string connectionString, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteScalar(connectionString, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteScalar(connectionString, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset and takes no parameters) against the provided OracleConnection.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(conn, CommandType.StoredProcedure, "GetOrderCount");
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleConnection connection, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteScalar(connection, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset) against the specified OracleConnection
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(conn, CommandType.StoredProcedure, "GetOrderCount", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, connection, null, commandType, commandText, commandParameters);
+
+ //execute the command & return the results
+ object retval = cmd.ExecuteScalar();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+
+ }
+
+ ///
+ /// Execute a stored procedure via a OracleCommand (that returns a 1x1 resultset) against the specified OracleConnection
+ /// using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(conn, "GetOrderCount", 24, 36);
+ ///
+ /// a valid OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleConnection connection, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteScalar(connection, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteScalar(connection, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset and takes no parameters) against the provided OracleTransaction.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(trans, CommandType.StoredProcedure, "GetOrderCount");
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleTransaction transaction, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteScalar(transaction, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset) against the specified OracleTransaction
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(trans, CommandType.StoredProcedure, "GetOrderCount", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);
+
+ //execute the command & return the results
+ object retval = cmd.ExecuteScalar();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+ }
+
+ ///
+ /// Execute a stored procedure via a OracleCommand (that returns a 1x1 resultset) against the specified
+ /// OracleTransaction using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(trans, "GetOrderCount", 24, 36);
+ ///
+ /// a valid OracleTransaction
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleTransaction transaction, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteScalar(transaction, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteScalar(transaction, CommandType.StoredProcedure, spName);
+ }
+
+ #endregion ExecuteScalar
+
+
+ }
+ ///
+ /// OracleHelperParameterCache provides functions to leverage a static cache of procedure parameters, and the
+ /// ability to discover parameters for stored procedures at run-time.
+ ///
+ ///
+
+ public sealed class OracleHelperParameterCache
+ {
+ #region private methods, variables, and constructors
+
+ //Since this class provides only static methods, make the default constructor private to prevent
+ //instances from being created with "new SqlHelperParameterCache()".
+ private OracleHelperParameterCache() { }
+
+ private static Hashtable paramCache = Hashtable.Synchronized(new Hashtable());
+
+ ///
+ /// resolve at run time the appropriate set of SqlParameters for a stored procedure
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// whether or not to include their return value parameter
+ ///
+ private static OracleParameter[] DiscoverSpParameterSet(string connectionString, string spName, bool includeReturnValueParameter)
+ {
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ using (OracleCommand cmd = new OracleCommand(spName, cn))
+ {
+ cn.Open();
+ cmd.CommandType = CommandType.StoredProcedure;
+ OracleCommandBuilder.DeriveParameters(cmd);
+
+ if (!includeReturnValueParameter)
+ {
+ cmd.Parameters.RemoveAt(0);
+ }
+
+ OracleParameter[] discoveredParameters = new OracleParameter[cmd.Parameters.Count]; ;
+
+ cmd.Parameters.CopyTo(discoveredParameters, 0);
+
+ return discoveredParameters;
+ }
+ }
+
+ //deep copy of cached OracleParameter array
+ private static OracleParameter[] CloneParameters(OracleParameter[] originalParameters)
+ {
+ OracleParameter[] clonedParameters = new OracleParameter[originalParameters.Length];
+
+ for (int i = 0, j = originalParameters.Length; i < j; i++)
+ {
+ clonedParameters[i] = (OracleParameter)((ICloneable)originalParameters[i]).Clone();
+ }
+
+ return clonedParameters;
+ }
+
+ #endregion private methods, variables, and constructors
+
+ #region caching functions
+
+ ///
+ /// add parameter array to the cache
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters to be cached
+ public static void CacheParameterSet(string connectionString, string commandText, params OracleParameter[] commandParameters)
+ {
+ string hashKey = connectionString + ":" + commandText;
+
+ paramCache[hashKey] = commandParameters;
+ }
+
+ ///
+ /// retrieve a parameter array from the cache
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters
+ public static OracleParameter[] GetCachedParameterSet(string connectionString, string commandText)
+ {
+ string hashKey = connectionString + ":" + commandText;
+
+ OracleParameter[] cachedParameters = (OracleParameter[])paramCache[hashKey];
+
+ if (cachedParameters == null)
+ {
+ return null;
+ }
+ return CloneParameters(cachedParameters);
+ }
+
+ #endregion caching functions
+
+ #region Parameter Discovery Functions
+
+ ///
+ /// Retrieves the set of SqlParameters appropriate for the stored procedure
+ ///
+ ///
+ /// This method will query the database for this information, and then store it in a cache for future requests.
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// an array of SqlParameters
+ public static OracleParameter[] GetSpParameterSet(string connectionString, string spName)
+ {
+ return GetSpParameterSet(connectionString, spName, false);
+ }
+
+ ///
+ /// Retrieves the set of SqlParameters appropriate for the stored procedure
+ ///
+ ///
+ /// This method will query the database for this information, and then store it in a cache for future requests.
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// a bool value indicating whether the return value parameter should be included in the results
+ /// an array of SqlParameters
+ public static OracleParameter[] GetSpParameterSet(string connectionString, string spName, bool includeReturnValueParameter)
+ {
+ string hashKey = connectionString + ":" + spName + (includeReturnValueParameter ? ":include ReturnValue Parameter" : "");
+
+ OracleParameter[] cachedParameters;
+
+ cachedParameters = (OracleParameter[])paramCache[hashKey];
+
+ if (cachedParameters == null)
+ {
+ cachedParameters = (OracleParameter[])(paramCache[hashKey] = DiscoverSpParameterSet(connectionString, spName, includeReturnValueParameter));
+ }
+
+ return CloneParameters(cachedParameters);
+ }
+
+ #endregion Parameter Discovery Functions
+ }
+}
diff --git a/Utility.cs b/Utility.cs
index 1429fd9..4e64d66 100644
--- a/Utility.cs
+++ b/Utility.cs
@@ -17,6 +17,11 @@
{
public class Utility
{
+ public static string DBServer;
+ public static string Database;
+ public static string UserID;
+ public static string DBPassword;
+
public static void SetBallons(GSOBalloon featureTooltip,GSOBalloonEx balloonEx)
{
featureTooltip.CacheFilePath = Path.GetDirectoryName(Application.ExecutablePath) + "/GeoScene/Globe/Temp";
diff --git a/bin/x64/Debug/LSPipeline.exe b/bin/x64/Debug/LSPipeline.exe
index 833a5e5..76f838b 100644
--- a/bin/x64/Debug/LSPipeline.exe
+++ b/bin/x64/Debug/LSPipeline.exe
Binary files differ
diff --git a/bin/x64/Debug/LSPipeline.pdb b/bin/x64/Debug/LSPipeline.pdb
index 245e727..28c81dc 100644
--- a/bin/x64/Debug/LSPipeline.pdb
+++ b/bin/x64/Debug/LSPipeline.pdb
Binary files differ
diff --git a/bin/x64/Debug/databaseConfigOracle.xml b/bin/x64/Debug/databaseConfigOracle.xml
index 7e48b08..94be70c 100644
--- a/bin/x64/Debug/databaseConfigOracle.xml
+++ b/bin/x64/Debug/databaseConfigOracle.xml
@@ -2,7 +2,7 @@
True
192.168.0.203
- szhtdb2
- release
- release
+ eydb2
+ scott
+ scott
\ No newline at end of file
diff --git a/bin/x64/Debug/log.txt b/bin/x64/Debug/log.txt
index 5236cc6..73bcf38 100644
--- a/bin/x64/Debug/log.txt
+++ b/bin/x64/Debug/log.txt
@@ -27704,3 +27704,75 @@
exception over ------------------------------------------------------------
+
+ exception begin -----------------2016/12/2 9:55:40---------------------
+
+
+
+ e.Message:输入字符串的格式不正确。
+
+ e.Source:mscorlib
+
+ e.TargetSite:Double ParseDouble(System.String, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo)
+
+ e.StackTrace: 在 System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
+ 在 System.Double.Parse(String s, IFormatProvider provider)
+ 在 WorldGIS.CtrlEntitySpaceInfo.positionChanged() 位置 D:\LSPipeline\UserControls\CtrlEntitySpaceInfo.cs:行号 113
+
+
+
+ exception over ------------------------------------------------------------
+
+ exception begin -----------------2016/12/2 9:55:41---------------------
+
+
+
+ e.Message:输入字符串的格式不正确。
+
+ e.Source:mscorlib
+
+ e.TargetSite:Double ParseDouble(System.String, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo)
+
+ e.StackTrace: 在 System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
+ 在 System.Double.Parse(String s, IFormatProvider provider)
+ 在 WorldGIS.CtrlEntitySpaceInfo.positionChanged() 位置 D:\LSPipeline\UserControls\CtrlEntitySpaceInfo.cs:行号 115
+
+
+
+ exception over ------------------------------------------------------------
+
+ exception begin -----------------2016/12/2 9:55:55---------------------
+
+
+
+ e.Message:输入字符串的格式不正确。
+
+ e.Source:mscorlib
+
+ e.TargetSite:Double ParseDouble(System.String, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo)
+
+ e.StackTrace: 在 System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
+ 在 System.Double.Parse(String s, IFormatProvider provider)
+ 在 WorldGIS.CtrlEntitySpaceInfo.positionChanged() 位置 D:\LSPipeline\UserControls\CtrlEntitySpaceInfo.cs:行号 113
+
+
+
+ exception over ------------------------------------------------------------
+
+ exception begin -----------------2016/12/2 9:55:56---------------------
+
+
+
+ e.Message:输入字符串的格式不正确。
+
+ e.Source:mscorlib
+
+ e.TargetSite:Double ParseDouble(System.String, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo)
+
+ e.StackTrace: 在 System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
+ 在 System.Double.Parse(String s, IFormatProvider provider)
+ 在 WorldGIS.CtrlEntitySpaceInfo.positionChanged() 位置 D:\LSPipeline\UserControls\CtrlEntitySpaceInfo.cs:行号 115
+
+
+
+ exception over ------------------------------------------------------------
diff --git a/obj/Debug/GenerateResource.read.1.tlog b/obj/Debug/GenerateResource.read.1.tlog
index b4c2526..95a0a19 100644
--- a/obj/Debug/GenerateResource.read.1.tlog
+++ b/obj/Debug/GenerateResource.read.1.tlog
Binary files differ
diff --git a/obj/Debug/LSPipeline.exe b/obj/Debug/LSPipeline.exe
index 833a5e5..76f838b 100644
--- a/obj/Debug/LSPipeline.exe
+++ b/obj/Debug/LSPipeline.exe
Binary files differ
diff --git a/FrmDatabaseParaSettingOracle.cs b/FrmDatabaseParaSettingOracle.cs
index 18c5e99..6e97dfb 100644
--- a/FrmDatabaseParaSettingOracle.cs
+++ b/FrmDatabaseParaSettingOracle.cs
@@ -47,12 +47,15 @@
}
string serverIp = textBoxIP.Text.Trim();
+ /*
string hostName = System.Net.Dns.GetHostName();
if (serverIp == hostName || serverIp == "localhost"
|| serverIp == System.Net.Dns.GetHostAddresses(hostName).GetValue(2).ToString())
{
serverIp = "127.0.0.1";
}
+ * */
+
DateTime timeStart = DateTime.Now;
GSODataSource ds = globeControl1.Globe.DataManager.GetDataSourceByName(serverIp + "/" + textBoxDatabase.Text.Trim() + "_" + textBoxUser.Text.Trim());
if (ds == null)
@@ -83,7 +86,7 @@
connectParams.dataSourceName = ds.Name;
connectParams.databaseType = EnumDataSourceType.Oracle;
Utility.connectParamsOfDatabase.Add(connectParams);
-
+ setUtilityValue(connectParams);
WriteXML();
MessageBox.Show("连接Oracle数据库成功,用时:" + secondsConnectOracle.ToString() + "秒", "提示");
}
@@ -92,6 +95,14 @@
this.Close();
}
+ private void setUtilityValue(DatabaseConnectParams connectParams)
+ {
+ Utility.DBServer = connectParams.ip;
+ Utility.Database = connectParams.databaseName;
+ Utility.UserID = connectParams.userName;
+ Utility.DBPassword = connectParams.password;
+ }
+
private void ReadXML()
{
string strFileName = Path.GetDirectoryName(Application.ExecutablePath) + "/databaseConfigOracle.xml";
diff --git a/GXBuilder.cs b/GXBuilder.cs
new file mode 100644
index 0000000..b2ec9b2
--- /dev/null
+++ b/GXBuilder.cs
@@ -0,0 +1,187 @@
+using System;
+using System.Data;
+using System.Drawing;
+using System.Runtime.InteropServices;
+using GeoScene.Data;
+using GeoScene.Engine;
+using GeoScene.Globe;
+
+namespace WorldGIS
+{
+ public class GXBuilder : ModelBuilder
+ {
+ private static double diameter = 0.1;
+
+ public GXBuilder(GSODataSource ds)
+ : base(ds)
+ {
+
+ }
+
+ public override bool validate(GSOLayer layer)
+ {
+ return true;
+ }
+
+ ///
+ ///
+ ///
+ /// 追加或修改
+ /// 高程入库或埋深入库
+ ///
+ public override bool doBuild(EnumUpdateMode updateMode,
+ EnumBuildMode buildMode,
+ BaseParam param)
+ {
+ LineParam lineParam = param as LineParam;
+ GSOFeatureDataset newFeatureSet = ds.GetDatasetByName(lineParam.layerName) as GSOFeatureDataset;
+ if (newFeatureSet == null)
+ {
+ newFeatureSet = CreateDBFeatureDataset(layer, lineParam.layerName);
+ }
+ newFeatureSet.Open();
+ GSOFeatures features = layer.GetAllFeatures(true);
+ for (int i = 0; i < features.Length; i++)
+ {
+ GSOFeature f = features[i];
+ GSOGeoPolyline3D lineeee = f.Geometry as GSOGeoPolyline3D;
+ if (lineeee == null || lineeee.GetSpaceLength(true, 6378137) == 0)
+ {
+ LogHelper.Error("出现数据无法入库:" + f.ID);
+ continue;
+ }
+
+ GSOFeature newFeature = newFeatureSet.CreateFeature();
+
+ double radius = diameter; //创建光纤的半径
+ newFeature.Geometry = updateGemotry(f, lineParam, radius, buildMode);
+ newFeature.Geometry.Style = getPipeLineStyle(lineParam, f, radius);
+ newFeature.Name = f.GetFieldAsString(lineParam.uniqueIdFieldName);
+ setFeatureValueByShapeFeature(f, newFeature);
+ // newFeatureSet
+ if (newFeatureSet.GetFeatureByName(newFeature.Name, true).Length > 0)
+ {
+ if (!this.UpdateGXDevice(newFeatureSet.GetFeatureByName(newFeature.Name, true)[0],
+ newFeature))
+ {
+ LogHelper.Error("光纤设备更新失败:" + newFeature.Name+"\r\n");
+ }
+ continue;
+ }
+ newFeatureSet.AddFeature(newFeature);
+ if (!AddGXDevice(newFeature))
+ {
+ LogHelper.Error("光纤数据保存Alarm_Device失败:" + newFeature.Name+"\r\n");
+ }
+ }
+ newFeatureSet.Save();
+ newFeatureSet.Close();
+ return true;
+ }
+
+ private bool AddGXDevice(GSOFeature feature)
+ {
+ //保存数据到设备表
+ try
+ {
+ String deviceType = feature.GetValue("DEVICETYPE") == null
+ ? "" : feature.GetValue("DEVICETYPE").ToString();
+ String devCode = feature.GetValue("DEVICEID") == null
+ ? "" : feature.GetValue("DEVICEID").ToString();
+ String road = feature.GetValue("ROAD") == null
+ ? "" : feature.GetValue("ROAD").ToString();
+
+ //TODO LIST:
+ string sqlCount = "select dbid from alarm_device_type where" +
+ " typename = '" + deviceType + "'";
+ object dbid = OracleUtils.ExecuteScalar(OracleUtils.ConnectionString,
+ CommandType.Text, sqlCount);
+ if (dbid == null)
+ {
+ return false;
+ }
+ int deviceTypeId = int.Parse(dbid.ToString());
+ string sql = "Insert into alarm_device (DBID,ACTIVE,DEVCODE,DEVNAME,FACTORY," +
+ "INSTALLDATE,GAOCHENG,HEIGHT,LATITUDE,LONGTITUDE,DEVICETYPE_ID) " +
+ "values (SEQ_DEVICE_ID.NEXTVAL, 1, '" + devCode + "', '" + deviceType + devCode +
+ "', " + "'航天二院', " + "to_date('" + DateTime.Now.ToString() + "','yyyy/MM/dd hh24:mi::ss'), "
+ + "0, 0, 0, 0, " + deviceTypeId + ")";
+ OracleUtils.ExecuteNonQuery(OracleUtils.ConnectionString, CommandType.Text, sql);
+
+ }
+ catch (Exception e)
+ {
+ throw;
+ }
+ return true;
+ }
+
+ private bool UpdateGXDevice(GSOFeature feature, GSOFeature newFeature)
+ {
+ String deviceType = newFeature.GetValue("DEVICETYPE") == null
+ ? "" : newFeature.GetValue("DEVICETYPE").ToString();
+ String devCode = newFeature.GetValue("DEVICEID") == null
+ ? "" : newFeature.GetValue("DEVICEID").ToString();
+ String road = newFeature.GetValue("ROAD") == null
+ ? "" : newFeature.GetValue("ROAD").ToString();
+
+ feature.Geometry = newFeature.Geometry.Clone();
+ this.setFeatureValueByShapeFeature(newFeature,feature);
+ // feature.Dataset.Save();
+
+ string sqlCount = "select dbid from alarm_device_type where" +
+ " typename = '" + deviceType + "'";
+ object dbid = OracleUtils.ExecuteScalar(OracleUtils.ConnectionString,
+ CommandType.Text, sqlCount);
+ if (dbid == null)
+ {
+ return false;
+ }
+ int deviceTypeId = int.Parse(dbid.ToString());
+
+ string sql = "update alarm_device set FACTORY='" + road +
+ "', DEVICETYPE_ID='" + deviceTypeId +
+ "', DEVNAME='"+deviceType+devCode+"' "+
+ "where devcode='" + devCode + "'";
+ OracleUtils.ExecuteNonQuery(OracleUtils.ConnectionString, CommandType.Text, sql);
+ return true;
+ }
+
+ private GSOLineStyle3D getPipeLineStyle(LineParam lineParam, GSOFeature f, double radius)
+ {
+ GSOPipeLineStyle3D style0 = new GSOPipeLineStyle3D();
+ style0.LineColor = Color.FromArgb(lineParam.transparency, lineParam.lineColor);
+ style0.Slice = lineParam.sliceNum;
+ style0.CornerSliceAngle = lineParam.cornerSliceAngle;
+ style0.Radius = radius;
+ return style0;
+ }
+
+ private GSOGeometry updateGemotry(GSOFeature f, LineParam lineParam, double radius, EnumBuildMode buildMode)
+ {
+
+ f.Geometry.AltitudeMode = (buildMode.Equals(EnumBuildMode.Alititude)) ? EnumAltitudeMode.RelativeToGround : EnumAltitudeMode.Absolute;
+
+ GSOGeoPolyline3D line = f.Geometry as GSOGeoPolyline3D;
+ if (line == null)
+ {
+ return null; //log4net 记录错误处理
+ }
+
+ double deep1 = 0;
+ double deep2 = 0;
+
+ GSOPoint3ds pt3ds = new GSOPoint3ds();
+ for (int n = 0; n < line[0].Count; n++)
+ {
+ GSOPoint3d pt3d = line[0][n];
+ pt3d.Z = 0;
+
+ pt3ds.Add(pt3d);
+ }
+ line[0] = pt3ds;
+ return line;
+ }
+
+ }
+}
diff --git a/HTForms/FrmPipelineModelDataBase.cs b/HTForms/FrmPipelineModelDataBase.cs
index 84a2d7b..3076bdd 100644
--- a/HTForms/FrmPipelineModelDataBase.cs
+++ b/HTForms/FrmPipelineModelDataBase.cs
@@ -91,6 +91,7 @@
}
else
datasource = ds;
+
if (comboBoxExLayer.Text.Trim() == "")
{
MessageBox.Show("请选择一个图层文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
@@ -126,20 +127,12 @@
comboBoxExLayer.Text));
if (layer == null) return;
- FieldValidate fieldValidate = FieldValidateFactory.Create(ValidateConfig.LoadConfig(),
- getEnumValidateType());
-
- if (!fieldValidate.Validate(layer))
+ if (txtModelLayer.Text != "传感设备图层")
{
- DateTime dt=DateTime.Now;
- string logFilePath = Application.StartupPath + "\\log\\" + dt.Year + "\\" + dt.Year + dt.Month + "\\" + dt.Year +
- dt.Month + dt.Day + ".txt";
- MessageBox.Show("选择的数据不符合数据规范,详情见日志" + logFilePath, "提示");
- return;
+ if (!getValidateResult(layer))
+ return;
}
- ModelBuilder lineBuilder = new LineBuilder(datasource);
-
LineParam lineParam = new LineParam();
lineParam.layerName = txtModelLayer.Text;
lineParam.uniqueIdFieldName = cmbID.Text;
@@ -149,14 +142,17 @@
lineParam.diameterFieldName = cmbRadius.Text;
lineParam.relativeMode = (cmbReference.Text == "管顶") ? 0 : 1;
lineParam.lineColor = btnPipelineColor.BackColor;
- lineParam.transparency=Convert.ToByte(ComboboxRansparency.Value);
+ lineParam.transparency = Convert.ToByte(ComboboxRansparency.Value);
lineParam.cornerSliceAngle = Convert.ToDouble(textBoxCornerSliceAngle.Text);
- lineParam.sliceNum=Convert.ToInt32(txtSlice.Text);
+ lineParam.sliceNum = Convert.ToInt32(txtSlice.Text);
lineParam.channelWidth = comboBoxExWidth.Text;
lineParam.channelHeight = comboBoxExHeight.Text;
- lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update,
- checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam);
+ if (txtModelLayer.Text != "传感设备图层")
+ lineBuilder(layer, lineParam);
+ else
+ gxLineBuilder(layer, lineParam);
+
addLayerToGlobeControl(lineParam.layerName);
//this.DialogResult = DialogResult.OK;
MessageBox.Show("入库完成!", "提示");
@@ -167,6 +163,33 @@
}
}
+ bool getValidateResult(GSOLayer layer)
+ {
+ FieldValidate fieldValidate = FieldValidateFactory.Create(ValidateConfig.LoadConfig(),
+ getEnumValidateType());
+
+ if (fieldValidate.Validate(layer)) return true;
+ DateTime dt = DateTime.Now;
+ string logFilePath = Application.StartupPath + "\\log\\" + dt.Year + "\\" + dt.Year + dt.Month +
+ "\\" + dt.Year + dt.Month + dt.Day + ".txt";
+ MessageBox.Show("选择的数据不符合数据规范,详情见日志" + logFilePath, "提示");
+ return false;
+ }
+
+ void lineBuilder(GSOLayer layer,LineParam lineParam)
+ {
+ ModelBuilder lineBuilder = new LineBuilder(datasource);
+ lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update,
+ checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam);
+ }
+
+ void gxLineBuilder(GSOLayer layer, LineParam lineParam)
+ {
+ ModelBuilder lineBuilder = new GXBuilder(datasource);
+ lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update,
+ checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam);
+ }
+
private EnumValidateType getEnumValidateType()
{
if (comboBoxExWidth.Text != "")
diff --git a/LSPipeline.csproj b/LSPipeline.csproj
index 477d8ba..599b492 100644
--- a/LSPipeline.csproj
+++ b/LSPipeline.csproj
@@ -222,6 +222,7 @@
FrmUpdateLayerFieldValues.cs
+
Form
@@ -243,6 +244,7 @@
+
True
diff --git a/LSPipeline.suo b/LSPipeline.suo
index c930f27..92b5d7d 100644
--- a/LSPipeline.suo
+++ b/LSPipeline.suo
Binary files differ
diff --git a/OracleUtils.cs b/OracleUtils.cs
new file mode 100644
index 0000000..c79d316
--- /dev/null
+++ b/OracleUtils.cs
@@ -0,0 +1,1271 @@
+using System;
+using System.Collections;
+using System.Data;
+using System.Data.OracleClient;
+
+namespace WorldGIS
+{
+ public abstract class OracleUtils
+ {
+ // Read the connection strings from the configuration file
+ //public static readonly string ConnectionString = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
+ public static readonly string ConnectionString = @"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=" + Utility.DBServer
+ + ")(PORT=1521))(CONNECT_DATA=(SID=" + Utility.Database
+ + ")));Persist Security Info=True;User Id=" + Utility.UserID
+ + "; Password=" + Utility.DBPassword + "";
+
+ //Create a hashtable for the parameter cached
+ private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());
+
+ #region private utility methods & constructors
+
+ //Since this class provides only static methods, make the default constructor private to prevent
+ //instances from being created with "new SqlHelper()".
+ private OracleUtils() { }
+
+ ///
+ /// This method is used to attach array of SqlParameters to a SqlCommand.
+ ///
+ /// This method will assign a value of DbNull to any parameter with a direction of
+ /// InputOutput and a value of null.
+ ///
+ /// This behavior will prevent default values from being used, but
+ /// this will be the less common case than an intended pure output parameter (derived as InputOutput)
+ /// where the user provided no input value.
+ ///
+ /// The command to which the parameters will be added
+ /// an array of SqlParameters tho be added to command
+ private static void AttachParameters(OracleCommand command, OracleParameter[] commandParameters)
+ {
+ foreach (OracleParameter p in commandParameters)
+ {
+ //check for derived output value with no value assigned
+ if ((p.Direction == ParameterDirection.InputOutput) && (p.Value == null))
+ {
+ p.Value = DBNull.Value;
+ }
+
+ command.Parameters.Add(p);
+ }
+ }
+
+ ///
+ /// This method assigns an array of values to an array of SqlParameters.
+ ///
+ /// array of SqlParameters to be assigned values
+ /// array of objects holding the values to be assigned
+ private static void AssignParameterValues(OracleParameter[] commandParameters, object[] parameterValues)
+ {
+ if ((commandParameters == null) || (parameterValues == null))
+ {
+ //do nothing if we get no data
+ return;
+ }
+
+ // we must have the same number of values as we pave parameters to put them in
+ if (commandParameters.Length != parameterValues.Length)
+ {
+ throw new ArgumentException("Parameter count does not match Parameter Value count.");
+ }
+
+ //iterate through the SqlParameters, assigning the values from the corresponding position in the
+ //value array
+ for (int i = 0, j = commandParameters.Length; i < j; i++)
+ {
+ commandParameters[i].Value = parameterValues[i];
+ }
+ }
+
+ ///
+ /// This method opens (if necessary) and assigns a connection, transaction, command type and parameters
+ /// to the provided command.
+ ///
+ /// the SqlCommand to be prepared
+ /// a valid OracleConnection, on which to execute this command
+ /// a valid OracleTransaction, or 'null'
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParameters to be associated with the command or 'null' if no parameters are required
+ private static void PrepareCommand(OracleCommand command, OracleConnection connection, OracleTransaction transaction, CommandType commandType, string commandText, OracleParameter[] commandParameters)
+ {
+ //if the provided connection is not open, we will open it
+ if (connection.State != ConnectionState.Open)
+ {
+ connection.Open();
+ }
+
+ //associate the connection with the command
+ command.Connection = connection;
+
+ //set the command text (stored procedure name or SQL statement)
+ command.CommandText = commandText;
+
+ //if we were provided a transaction, assign it.
+ if (transaction != null)
+ {
+ command.Transaction = transaction;
+ }
+
+ //set the command type
+ command.CommandType = commandType;
+
+ //attach the command parameters if they are provided
+ if (commandParameters != null)
+ {
+ AttachParameters(command, commandParameters);
+ }
+ }
+
+
+ #endregion private utility methods & constructors
+
+ #region ExecuteNonQuery
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset and takes no parameters) against the database specified in
+ /// the connection string.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders");
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteNonQuery(connectionString, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset) against the database specified in the connection string
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create & open a OracleConnection, and dispose of it after we are done.
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ {
+ cn.Open();
+
+ //call the overload that takes a connection in place of the connection string
+ return ExecuteNonQuery(cn, commandType, commandText, commandParameters);
+ }
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns no resultset) against the database specified in
+ /// the connection string using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(connString, "PublishOrders", 24, 36);
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored prcedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(string connectionString, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset and takes no parameters) against the provided OracleConnection.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(conn, CommandType.StoredProcedure, "PublishOrders");
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleConnection connection, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteNonQuery(connection, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset) against the specified OracleConnection
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(conn, CommandType.StoredProcedure, "PublishOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, connection, null, commandType, commandText, commandParameters);
+
+ //finally, execute the command.
+ int retval = cmd.ExecuteNonQuery();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+ }
+
+ public static int ExecuteNonQueryWithTimeout(string connectionString, CommandType commandType, string commandText, int cmdTimeout)
+ {
+ //create a command and prepare it for execution
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ {
+ cn.Open();
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, cn, null, commandType, commandText, null);
+ cmd.CommandTimeout = cmdTimeout;
+ //finally, execute the command.
+ int retval = cmd.ExecuteNonQuery();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+ }
+
+ }
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns no resultset) against the specified OracleConnection
+ /// using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(conn, "PublishOrders", 24, 36);
+ ///
+ /// a valid OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleConnection connection, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteNonQuery(connection, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteNonQuery(connection, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset and takes no parameters) against the provided OracleTransaction.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "PublishOrders");
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleTransaction transaction, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteNonQuery(transaction, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns no resultset) against the specified OracleTransaction
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);
+
+ //finally, execute the command.
+ int retval = cmd.ExecuteNonQuery();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns no resultset) against the specified
+ /// OracleTransaction using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int result = ExecuteNonQuery(conn, trans, "PublishOrders", 24, 36);
+ ///
+ /// a valid OracleTransaction
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an int representing the number of rows affected by the command
+ public static int ExecuteNonQuery(OracleTransaction transaction, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName);
+ }
+
+
+ #endregion ExecuteNonQuery
+
+ #region ExecuteDataSet
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the database specified in
+ /// the connection string.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(connString, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(string connectionString, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteDataset(connectionString, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the database specified in the connection string
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(connString, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create & open a OracleConnection, and dispose of it after we are done.
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ {
+ cn.Open();
+
+ //call the overload that takes a connection in place of the connection string
+ return ExecuteDataset(cn, commandType, commandText, commandParameters);
+ }
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the database specified in
+ /// the connection string using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(connString, "GetOrders", 24, 36);
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(string connectionString, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteDataset(connectionString, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteDataset(connectionString, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided OracleConnection.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(conn, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleConnection connection, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteDataset(connection, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the specified OracleConnection
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(conn, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, connection, null, commandType, commandText, commandParameters);
+
+ //create the DataAdapter & DataSet
+ OracleDataAdapter da = new OracleDataAdapter(cmd);
+ DataSet ds = new DataSet();
+
+ //fill the DataSet using default values for DataTable names, etc.
+ da.Fill(ds);
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+
+ //return the dataset
+ return ds;
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified OracleConnection
+ /// using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(conn, "GetOrders", 24, 36);
+ ///
+ /// a valid OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleConnection connection, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteDataset(connection, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteDataset(connection, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided OracleTransaction.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(trans, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleTransaction transaction, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteDataset(transaction, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the specified OracleTransaction
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(trans, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);
+
+ //create the DataAdapter & DataSet
+ OracleDataAdapter da = new OracleDataAdapter(cmd);
+ DataSet ds = new DataSet();
+
+ //fill the DataSet using default values for DataTable names, etc.
+ da.Fill(ds);
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+
+ //return the dataset
+ return ds;
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified
+ /// OracleTransaction using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// DataSet ds = ExecuteDataset(trans, "GetOrders", 24, 36);
+ ///
+ /// a valid OracleTransaction
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a dataset containing the resultset generated by the command
+ public static DataSet ExecuteDataset(OracleTransaction transaction, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteDataset(transaction, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteDataset(transaction, CommandType.StoredProcedure, spName);
+ }
+
+ #endregion ExecuteDataSet
+
+ #region ExecuteReader
+
+ ///
+ /// this enum is used to indicate whether the connection was provided by the caller, or created by SqlHelper, so that
+ /// we can set the appropriate CommandBehavior when calling ExecuteReader()
+ ///
+ private enum OracleConnectionOwnership
+ {
+ /// Connection is owned and managed by SqlHelper
+ Internal,
+ /// Connection is owned and managed by the caller
+ External
+ }
+
+ ///
+ /// Create and prepare a SqlCommand, and call ExecuteReader with the appropriate CommandBehavior.
+ ///
+ ///
+ /// If we created and opened the connection, we want the connection to be closed when the DataReader is closed.
+ ///
+ /// If the caller provided the connection, we want to leave it to them to manage.
+ ///
+ /// a valid OracleConnection, on which to execute this command
+ /// a valid OracleTransaction, or 'null'
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParameters to be associated with the command or 'null' if no parameters are required
+ /// indicates whether the connection parameter was provided by the caller, or created by SqlHelper
+ /// SqlDataReader containing the results of the command
+ private static OracleDataReader ExecuteReader(OracleConnection connection, OracleTransaction transaction, CommandType commandType, string commandText, OracleParameter[] commandParameters, OracleConnectionOwnership connectionOwnership)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, connection, transaction, commandType, commandText, commandParameters);
+
+ //create a reader
+ OracleDataReader dr;
+
+ // call ExecuteReader with the appropriate CommandBehavior
+ if (connectionOwnership == OracleConnectionOwnership.External)
+ {
+ dr = cmd.ExecuteReader();
+ }
+ else
+ {
+ dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
+
+ }
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+
+ return dr;
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the database specified in
+ /// the connection string.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(connString, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(string connectionString, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteReader(connectionString, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the database specified in the connection string
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(connString, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create & open a OracleConnection
+ OracleConnection cn = new OracleConnection(connectionString);
+ cn.Open();
+
+ try
+ {
+ //call the private overload that takes an internally owned connection in place of the connection string
+ return ExecuteReader(cn, null, commandType, commandText, commandParameters, OracleConnectionOwnership.Internal);
+ }
+ catch
+ {
+ //if we fail to return the SqlDatReader, we need to close the connection ourselves
+ cn.Close();
+ throw;
+ }
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the database specified in
+ /// the connection string using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(connString, "GetOrders", 24, 36);
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(string connectionString, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteReader(connectionString, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteReader(connectionString, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided OracleConnection.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(conn, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleConnection connection, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteReader(connection, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the specified OracleConnection
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(conn, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //pass through the call to the private overload using a null transaction value and an externally owned connection
+ return ExecuteReader(connection, null, commandType, commandText, commandParameters, OracleConnectionOwnership.External);
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified OracleConnection
+ /// using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(conn, "GetOrders", 24, 36);
+ ///
+ /// a valid OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleConnection connection, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);
+
+ AssignParameterValues(commandParameters, parameterValues);
+
+ return ExecuteReader(connection, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteReader(connection, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset and takes no parameters) against the provided OracleTransaction.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(trans, CommandType.StoredProcedure, "GetOrders");
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleTransaction transaction, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteReader(transaction, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a SqlCommand (that returns a resultset) against the specified OracleTransaction
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(trans, CommandType.StoredProcedure, "GetOrders", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //pass through to private overload, indicating that the connection is owned by the caller
+ return ExecuteReader(transaction.Connection, transaction, commandType, commandText, commandParameters, OracleConnectionOwnership.External);
+ }
+
+ ///
+ /// Execute a stored procedure via a SqlCommand (that returns a resultset) against the specified
+ /// OracleTransaction using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// SqlDataReader dr = ExecuteReader(trans, "GetOrders", 24, 36);
+ ///
+ /// a valid OracleTransaction
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// a SqlDataReader containing the resultset generated by the command
+ public static OracleDataReader ExecuteReader(OracleTransaction transaction, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);
+
+ AssignParameterValues(commandParameters, parameterValues);
+
+ return ExecuteReader(transaction, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteReader(transaction, CommandType.StoredProcedure, spName);
+ }
+
+ #endregion ExecuteReader
+
+ #region ExecuteScalar
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset and takes no parameters) against the database specified in
+ /// the connection string.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(connString, CommandType.StoredProcedure, "GetOrderCount");
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(string connectionString, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteScalar(connectionString, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset) against the database specified in the connection string
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(connString, CommandType.StoredProcedure, "GetOrderCount", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(string connectionString, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create & open a OracleConnection, and dispose of it after we are done.
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ {
+ cn.Open();
+
+ //call the overload that takes a connection in place of the connection string
+ return ExecuteScalar(cn, commandType, commandText, commandParameters);
+ }
+ }
+
+ ///
+ /// Execute a stored procedure via a OracleCommand (that returns a 1x1 resultset) against the database specified in
+ /// the connection string using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(connString, "GetOrderCount", 24, 36);
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(string connectionString, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteScalar(connectionString, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteScalar(connectionString, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset and takes no parameters) against the provided OracleConnection.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(conn, CommandType.StoredProcedure, "GetOrderCount");
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleConnection connection, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteScalar(connection, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset) against the specified OracleConnection
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(conn, CommandType.StoredProcedure, "GetOrderCount", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleConnection
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, connection, null, commandType, commandText, commandParameters);
+
+ //execute the command & return the results
+ object retval = cmd.ExecuteScalar();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+
+ }
+
+ ///
+ /// Execute a stored procedure via a OracleCommand (that returns a 1x1 resultset) against the specified OracleConnection
+ /// using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(conn, "GetOrderCount", 24, 36);
+ ///
+ /// a valid OracleConnection
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleConnection connection, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteScalar(connection, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteScalar(connection, CommandType.StoredProcedure, spName);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset and takes no parameters) against the provided OracleTransaction.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(trans, CommandType.StoredProcedure, "GetOrderCount");
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleTransaction transaction, CommandType commandType, string commandText)
+ {
+ //pass through the call providing null for the set of SqlParameters
+ return ExecuteScalar(transaction, commandType, commandText, null);
+ }
+
+ ///
+ /// Execute a OracleCommand (that returns a 1x1 resultset) against the specified OracleTransaction
+ /// using the provided parameters.
+ ///
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(trans, CommandType.StoredProcedure, "GetOrderCount", new OracleParameter("@prodid", 24));
+ ///
+ /// a valid OracleTransaction
+ /// the CommandType (stored procedure, text, etc.)
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters used to execute the command
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
+ {
+ //create a command and prepare it for execution
+ OracleCommand cmd = new OracleCommand();
+ PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);
+
+ //execute the command & return the results
+ object retval = cmd.ExecuteScalar();
+
+ // detach the SqlParameters from the command object, so they can be used again.
+ cmd.Parameters.Clear();
+ return retval;
+ }
+
+ ///
+ /// Execute a stored procedure via a OracleCommand (that returns a 1x1 resultset) against the specified
+ /// OracleTransaction using the provided parameter values. This method will query the database to discover the parameters for the
+ /// stored procedure (the first time each stored procedure is called), and assign the values based on parameter order.
+ ///
+ ///
+ /// This method provides no access to output parameters or the stored procedure's return value parameter.
+ ///
+ /// e.g.:
+ /// int orderCount = (int)ExecuteScalar(trans, "GetOrderCount", 24, 36);
+ ///
+ /// a valid OracleTransaction
+ /// the name of the stored procedure
+ /// an array of objects to be assigned as the input values of the stored procedure
+ /// an object containing the value in the 1x1 resultset generated by the command
+ public static object ExecuteScalar(OracleTransaction transaction, string spName, params object[] parameterValues)
+ {
+ //if we receive parameter values, we need to figure out where they go
+ if ((parameterValues != null) && (parameterValues.Length > 0))
+ {
+ //pull the parameters for this stored procedure from the parameter cache (or discover them & populate the cache)
+ OracleParameter[] commandParameters = OracleHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);
+
+ //assign the provided values to these parameters based on parameter order
+ AssignParameterValues(commandParameters, parameterValues);
+
+ //call the overload that takes an array of SqlParameters
+ return ExecuteScalar(transaction, CommandType.StoredProcedure, spName, commandParameters);
+ }
+ //otherwise we can just call the SP without params
+ return ExecuteScalar(transaction, CommandType.StoredProcedure, spName);
+ }
+
+ #endregion ExecuteScalar
+
+
+ }
+ ///
+ /// OracleHelperParameterCache provides functions to leverage a static cache of procedure parameters, and the
+ /// ability to discover parameters for stored procedures at run-time.
+ ///
+ ///
+
+ public sealed class OracleHelperParameterCache
+ {
+ #region private methods, variables, and constructors
+
+ //Since this class provides only static methods, make the default constructor private to prevent
+ //instances from being created with "new SqlHelperParameterCache()".
+ private OracleHelperParameterCache() { }
+
+ private static Hashtable paramCache = Hashtable.Synchronized(new Hashtable());
+
+ ///
+ /// resolve at run time the appropriate set of SqlParameters for a stored procedure
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// whether or not to include their return value parameter
+ ///
+ private static OracleParameter[] DiscoverSpParameterSet(string connectionString, string spName, bool includeReturnValueParameter)
+ {
+ using (OracleConnection cn = new OracleConnection(connectionString))
+ using (OracleCommand cmd = new OracleCommand(spName, cn))
+ {
+ cn.Open();
+ cmd.CommandType = CommandType.StoredProcedure;
+ OracleCommandBuilder.DeriveParameters(cmd);
+
+ if (!includeReturnValueParameter)
+ {
+ cmd.Parameters.RemoveAt(0);
+ }
+
+ OracleParameter[] discoveredParameters = new OracleParameter[cmd.Parameters.Count]; ;
+
+ cmd.Parameters.CopyTo(discoveredParameters, 0);
+
+ return discoveredParameters;
+ }
+ }
+
+ //deep copy of cached OracleParameter array
+ private static OracleParameter[] CloneParameters(OracleParameter[] originalParameters)
+ {
+ OracleParameter[] clonedParameters = new OracleParameter[originalParameters.Length];
+
+ for (int i = 0, j = originalParameters.Length; i < j; i++)
+ {
+ clonedParameters[i] = (OracleParameter)((ICloneable)originalParameters[i]).Clone();
+ }
+
+ return clonedParameters;
+ }
+
+ #endregion private methods, variables, and constructors
+
+ #region caching functions
+
+ ///
+ /// add parameter array to the cache
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters to be cached
+ public static void CacheParameterSet(string connectionString, string commandText, params OracleParameter[] commandParameters)
+ {
+ string hashKey = connectionString + ":" + commandText;
+
+ paramCache[hashKey] = commandParameters;
+ }
+
+ ///
+ /// retrieve a parameter array from the cache
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the stored procedure name or T-SQL command
+ /// an array of SqlParamters
+ public static OracleParameter[] GetCachedParameterSet(string connectionString, string commandText)
+ {
+ string hashKey = connectionString + ":" + commandText;
+
+ OracleParameter[] cachedParameters = (OracleParameter[])paramCache[hashKey];
+
+ if (cachedParameters == null)
+ {
+ return null;
+ }
+ return CloneParameters(cachedParameters);
+ }
+
+ #endregion caching functions
+
+ #region Parameter Discovery Functions
+
+ ///
+ /// Retrieves the set of SqlParameters appropriate for the stored procedure
+ ///
+ ///
+ /// This method will query the database for this information, and then store it in a cache for future requests.
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// an array of SqlParameters
+ public static OracleParameter[] GetSpParameterSet(string connectionString, string spName)
+ {
+ return GetSpParameterSet(connectionString, spName, false);
+ }
+
+ ///
+ /// Retrieves the set of SqlParameters appropriate for the stored procedure
+ ///
+ ///
+ /// This method will query the database for this information, and then store it in a cache for future requests.
+ ///
+ /// a valid connection string for a OracleConnection
+ /// the name of the stored procedure
+ /// a bool value indicating whether the return value parameter should be included in the results
+ /// an array of SqlParameters
+ public static OracleParameter[] GetSpParameterSet(string connectionString, string spName, bool includeReturnValueParameter)
+ {
+ string hashKey = connectionString + ":" + spName + (includeReturnValueParameter ? ":include ReturnValue Parameter" : "");
+
+ OracleParameter[] cachedParameters;
+
+ cachedParameters = (OracleParameter[])paramCache[hashKey];
+
+ if (cachedParameters == null)
+ {
+ cachedParameters = (OracleParameter[])(paramCache[hashKey] = DiscoverSpParameterSet(connectionString, spName, includeReturnValueParameter));
+ }
+
+ return CloneParameters(cachedParameters);
+ }
+
+ #endregion Parameter Discovery Functions
+ }
+}
diff --git a/Utility.cs b/Utility.cs
index 1429fd9..4e64d66 100644
--- a/Utility.cs
+++ b/Utility.cs
@@ -17,6 +17,11 @@
{
public class Utility
{
+ public static string DBServer;
+ public static string Database;
+ public static string UserID;
+ public static string DBPassword;
+
public static void SetBallons(GSOBalloon featureTooltip,GSOBalloonEx balloonEx)
{
featureTooltip.CacheFilePath = Path.GetDirectoryName(Application.ExecutablePath) + "/GeoScene/Globe/Temp";
diff --git a/bin/x64/Debug/LSPipeline.exe b/bin/x64/Debug/LSPipeline.exe
index 833a5e5..76f838b 100644
--- a/bin/x64/Debug/LSPipeline.exe
+++ b/bin/x64/Debug/LSPipeline.exe
Binary files differ
diff --git a/bin/x64/Debug/LSPipeline.pdb b/bin/x64/Debug/LSPipeline.pdb
index 245e727..28c81dc 100644
--- a/bin/x64/Debug/LSPipeline.pdb
+++ b/bin/x64/Debug/LSPipeline.pdb
Binary files differ
diff --git a/bin/x64/Debug/databaseConfigOracle.xml b/bin/x64/Debug/databaseConfigOracle.xml
index 7e48b08..94be70c 100644
--- a/bin/x64/Debug/databaseConfigOracle.xml
+++ b/bin/x64/Debug/databaseConfigOracle.xml
@@ -2,7 +2,7 @@
True
192.168.0.203
- szhtdb2
- release
- release
+ eydb2
+ scott
+ scott
\ No newline at end of file
diff --git a/bin/x64/Debug/log.txt b/bin/x64/Debug/log.txt
index 5236cc6..73bcf38 100644
--- a/bin/x64/Debug/log.txt
+++ b/bin/x64/Debug/log.txt
@@ -27704,3 +27704,75 @@
exception over ------------------------------------------------------------
+
+ exception begin -----------------2016/12/2 9:55:40---------------------
+
+
+
+ e.Message:输入字符串的格式不正确。
+
+ e.Source:mscorlib
+
+ e.TargetSite:Double ParseDouble(System.String, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo)
+
+ e.StackTrace: 在 System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
+ 在 System.Double.Parse(String s, IFormatProvider provider)
+ 在 WorldGIS.CtrlEntitySpaceInfo.positionChanged() 位置 D:\LSPipeline\UserControls\CtrlEntitySpaceInfo.cs:行号 113
+
+
+
+ exception over ------------------------------------------------------------
+
+ exception begin -----------------2016/12/2 9:55:41---------------------
+
+
+
+ e.Message:输入字符串的格式不正确。
+
+ e.Source:mscorlib
+
+ e.TargetSite:Double ParseDouble(System.String, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo)
+
+ e.StackTrace: 在 System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
+ 在 System.Double.Parse(String s, IFormatProvider provider)
+ 在 WorldGIS.CtrlEntitySpaceInfo.positionChanged() 位置 D:\LSPipeline\UserControls\CtrlEntitySpaceInfo.cs:行号 115
+
+
+
+ exception over ------------------------------------------------------------
+
+ exception begin -----------------2016/12/2 9:55:55---------------------
+
+
+
+ e.Message:输入字符串的格式不正确。
+
+ e.Source:mscorlib
+
+ e.TargetSite:Double ParseDouble(System.String, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo)
+
+ e.StackTrace: 在 System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
+ 在 System.Double.Parse(String s, IFormatProvider provider)
+ 在 WorldGIS.CtrlEntitySpaceInfo.positionChanged() 位置 D:\LSPipeline\UserControls\CtrlEntitySpaceInfo.cs:行号 113
+
+
+
+ exception over ------------------------------------------------------------
+
+ exception begin -----------------2016/12/2 9:55:56---------------------
+
+
+
+ e.Message:输入字符串的格式不正确。
+
+ e.Source:mscorlib
+
+ e.TargetSite:Double ParseDouble(System.String, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo)
+
+ e.StackTrace: 在 System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
+ 在 System.Double.Parse(String s, IFormatProvider provider)
+ 在 WorldGIS.CtrlEntitySpaceInfo.positionChanged() 位置 D:\LSPipeline\UserControls\CtrlEntitySpaceInfo.cs:行号 115
+
+
+
+ exception over ------------------------------------------------------------
diff --git a/obj/Debug/GenerateResource.read.1.tlog b/obj/Debug/GenerateResource.read.1.tlog
index b4c2526..95a0a19 100644
--- a/obj/Debug/GenerateResource.read.1.tlog
+++ b/obj/Debug/GenerateResource.read.1.tlog
Binary files differ
diff --git a/obj/Debug/LSPipeline.exe b/obj/Debug/LSPipeline.exe
index 833a5e5..76f838b 100644
--- a/obj/Debug/LSPipeline.exe
+++ b/obj/Debug/LSPipeline.exe
Binary files differ
diff --git a/obj/Debug/LSPipeline.pdb b/obj/Debug/LSPipeline.pdb
index 245e727..28c81dc 100644
--- a/obj/Debug/LSPipeline.pdb
+++ b/obj/Debug/LSPipeline.pdb
Binary files differ