Я программист-хобби, новый в мире ООП. В своем стремлении к самообучению я разрабатываю небольшое приложение на базе SQL. Поскольку я планирую несколько раз подключаться к базе данных SQL Server Compact, я решил поместить его в свой класс. Соединение выполняется при первом вызове метода класса, но во второй раз, когда тот же метод класса называется, он выдает исключение недопустимого типа пути. Лучше всего я могу сказать, что при первом запуске он находит .sdf
, как и следовало ожидать, но во втором режиме он ищет в папке отладки проектного файла визуальной студии, которая, конечно, неверна.C# SQL Server Компактное соединение успешно выполняется при первом вызове, но не во втором
using System.IO;
using System.Data.SqlServerCe;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace Horizon_CRM_Server
{
public class sqlengine
{
public string sqlinst { get; set; }
public string sqlpass { get; set; }
public string sqlquery { get; set; }
public string sqlquerytype { get; set; }
public string[] sqldata { get; set; }
public string[] sqlstringoutput { get; set; }
public Int32 sqlintoutput { get; set; }
public sqlengine() { }
public void runsqlengine()
{
using (SqlCeConnection main_conn = new SqlCeConnection("Data Source=" + this.sqlinst + ";Password=" + this.sqlpass))
{
try
{
Console.WriteLine("SQL ENGINE CALLED");
Console.WriteLine();
SqlCeCommand sqlcommand = new SqlCeCommand(sqlquery, main_conn);
sqlcommand.Connection.Open();
switch (this.sqlquerytype)
{
case "count":
Console.WriteLine("SQLENGINE COUNTING");
Console.WriteLine();
this.sqlintoutput = (Int32)sqlcommand.ExecuteScalar();
Console.WriteLine("Initial Connection to Database Succeeded. There are " + this.sqlintoutput + " Users registered");
break;
default:
Console.WriteLine("ERROR");
break;
}
}
catch (SqlCeException ex)
{
string expath = null;
Console.WriteLine("ERROR:");
Console.WriteLine(ex);
Console.WriteLine();
try
{
string ez = ex.ToString();
expath = AppDomain.CurrentDomain.BaseDirectory + DateTime.Now.ToString("dd_MM_yyyy_hhmmss_fff") + "HorizonCRM_ERR.txt";
System.IO.File.WriteAllText(expath, ez);
Console.WriteLine("ERROR HAS BEEN LOGGED TO: ");
Console.WriteLine(expath);
Console.WriteLine();
}
catch (IOException ex2)
{
Console.WriteLine("ERROR: Could not log exception!");
Console.WriteLine(ex2);
Console.WriteLine();
}
catch (Exception ex3)
{
Console.WriteLine("ERROR: UNKNOWN!");
Console.WriteLine(ex3);
Console.WriteLine();
}
}
}
}
}
class Program
{
static void Main(string[] args)
{
IPHostEntry crmhost = Dns.GetHostEntry("127.0.0.1");
IPAddress crmip = crmhost.AddressList[0];
IPEndPoint localendpoint = new IPEndPoint(crmip, 11000);
sqlengine sqlusers = new sqlengine();
sqlusers.sqlinst = "crmDB.sdf";
sqlusers.sqlpass = "4or1Z0n";
sqlusers.sqlquery = "SELECT COUNT(*) Id FROM user_data";
sqlusers.sqlquerytype = "count";
sqlusers.runsqlengine();
sqlengine sqlcustomers = new sqlengine();
**sqlcustomers.sqlinst = "cmrDB.sdf";**
sqlcustomers.sqlpass = "4or1Z0n";
sqlcustomers.sqlquery = "SELECT COUNT (*) Id FROM customer_data";
sqlcustomers.sqlquerytype = "count";
sqlcustomers.runsqlengine();
Console.ReadLine();
}
}
}
Я понимаю, что я мог бы определить строку подключения напрямую, но хочу сохранить возможность указать это в отдельный файл базы данных при запуске, если это будет необходимо.
Я все об этом не так? Я неправильно подключаюсь к компактной версии базы данных?
Переполнение стека имеет решающее значение для того, чтобы получить меня до сих пор, и я очень ценю помощь, которую все предлагают здесь.
При первом вызове '' crmDB.sdf "' при втором вызове '' cmrDB.sdf "'. «Хорошей практикой является сохранение строки подключения для вашего приложения в [файле конфигурации] (https://www.connectionstrings.com/store-connection-string-in-webconfig/)». Кроме того, вы можете принять некоторые [соглашения об именах] (https://msdn.microsoft.com/library/ms229045.aspx), чтобы упростить чтение кода. По крайней мере, сохраняйте классы, свойства и методы UpperCaseCamelCase.^_^ – Corak
Вау ... Я серьезно провел последние два часа, чтобы устранить эту проблему .... Наверное, мне нужна была вторая пара глаз. Очень признателен. Я планирую использовать конфигурационные файлы для хранения данных, но SQL очень новичок в программировании, поэтому я просто стрелял, чтобы заставить его работать в стиле ООП, прежде чем двигаться дальше. Спасибо за ссылку, я сделаю все возможное, чтобы применить ее. – Phexyaa