Files
mRemoteNG/mRemoteV1/Config/DataProviders/SqlDataProvider.cs
2017-12-10 22:22:38 +02:00

68 lines
2.1 KiB
C#

using System.Data;
using System.Data.SqlClient;
using mRemoteNG.Config.DatabaseConnectors;
using mRemoteNG.Messages;
using mRemoteNG.App;
namespace mRemoteNG.Config.DataProviders
{
public class SqlDataProvider : IDataProvider<DataTable>
{
public SqlDatabaseConnector SqlDatabaseConnector { get; }
public SqlDataProvider(SqlDatabaseConnector sqlDatabaseConnector)
{
SqlDatabaseConnector = sqlDatabaseConnector;
}
public DataTable Load()
{
var dataTable = new DataTable();
var sqlQuery = new SqlCommand("SELECT * FROM tblCons ORDER BY PositionID ASC");
SqlDatabaseConnector.AssociateItemToThisConnector(sqlQuery);
if (!SqlDatabaseConnector.IsConnected)
OpenConnection();
var sqlDataReader = sqlQuery.ExecuteReader(CommandBehavior.CloseConnection);
if (sqlDataReader.HasRows)
dataTable.Load(sqlDataReader);
sqlDataReader.Close();
return dataTable;
}
public void Save(DataTable dataTable)
{
if (SqlUserIsReadOnly())
{
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, "Trying to save connections but the SQL read only checkbox is checked, aborting!");
return;
}
if (!SqlDatabaseConnector.IsConnected)
OpenConnection();
using (var sqlBulkCopy = new SqlBulkCopy(SqlDatabaseConnector.SqlConnection))
{
foreach (DataColumn col in dataTable.Columns)
sqlBulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName);
sqlBulkCopy.DestinationTableName = "dbo.tblCons";
sqlBulkCopy.WriteToServer(dataTable);
}
}
public void OpenConnection()
{
SqlDatabaseConnector.Connect();
}
public void CloseConnection()
{
SqlDatabaseConnector.Disconnect();
}
private bool SqlUserIsReadOnly()
{
return mRemoteNG.Settings.Default.SQLReadOnly;
}
}
}