is there a way to include sql plugins to my c#application - c#

i developed C# application for windows the back end is mysql database but the problem is, if i want to run it in different computer it requires mysql server software or other wise it cant open the data base. is there any way to add plugins to the s C# application or adding open source software to my installation package to run the database file. please note i'm new to C# this is for education purpose sorry for if my questions asking method is not professional.
Front end : visual studio 2013
Back End : Mysql server 2008

I dont know if i got your question right but i assume it a general Data Access Layer strategy question.
If you "bind" your application with mySQL or any other db then that's it.
Depending on the size of the application you could use open source db like SQLite It is a one file db that can be stored with your application.
If you really want to be able to use your software with many underlying DBs then you have alot of job.
THIS question in SO debates that maybe it is not a good idea or at least it is a partially good idea. Partially means that you could abstract basic db behavior to be db independent but you will not get rid off the dependencies 100%
Another good approach would be to use an ORM. Either a micro ORM like dapper or afull ORM like Nhibernate
ORMs let you do just that. You can use an OleDb provider and have access to many underlying sources at a cost of course of not using 100% the native capabilities of the DB....

Related

What kind of database should I use for tracking operations for a model railroad?

I'm not sure where to ask this question, so I'll start here. Basically, I was handed a very old program written in a very old language (QB 4.5) and asked to convert it to a modern-ish language. I plan on using C# and I imagine using a database to keep track of inventory as well as car movement, but I'm trying to figure out what kind of database to use? The end goal is to create an exe file that the users will install once and use the GUI to manage their model railroad operations. Should I create something like multiple CSVs/text files or use something more like an Access Database? I can't imagine any one user of the program having millions of records, so I surely don't need and kind of Microsoft SQL or Oracle instance. So here I am, asking for suggestions.
If you're using C#, my recommendation is Microsoft SQL Server. You can spin up an instance on Azure for ~$5/month if you don't feel like installing a local instance. Entity Framework can be nice if you don't feel like peppering custom SQL statements in your code base.

C# GUI with sql developer database

I have been creating a database that will handle tutor and student information. Students will be able to access information about the tutors and the database itself will be able to track the students that come in for tutoring sessions (i.e. demographic information and major information as well as attendance). I have a good database created but now I need a GUI to go with it.
Last semester I programmed window form applications in c# with visual studios (2017) and I think this would be a great application to create a GUI with for this database. I am sure there is a way to connect my database to visual studio but I am not sure the commands that would be executed or the certain steps that take place inside visual studio (adding a file? reference?).
I am looking for one of two solutions. We have sql developer available on a school network that can be accessed via IP and student user/pass. I could connect the c# application to that database, but then it would only work while i am on the campus network (which is fine because thats where the application will be used). I cannot find any documentation on how to go about this, perhaps its not possible yet.
The other solution I foresee is creating a local database on my computer for the application which would work fine as well, as long as I can use the script that I have made already, if this is the case I just need to know how to connect the C# code to the local database (I am guessing to create a local database there is an option just like there is a windows form application, it would be a local database supporting pl/sql).
Anyways I would greatly appreciate any help given. If you can point me to some documentation or explain yourself IT would be a big help to me and my final grade (and the tutoring center).
Thanks all!
TL:DR Need a way to connect C# code to database either local or on school network.
GUI:
So first off, in terms of what you should do for your GUI with C#, I would recommend WPF. It is newer and more supported by Microsoft than Windows Form Application.
SQL:
For your SQL connection it really depends on your type of database. I recommend you search the NuGet package library as there are connectors for almost every type of DB. I know .Net comes with a general connector, but personally with my MySQL DB I had the most luck with the MySQL connector in NuGet.
More Help:
Also based off of your tag oracle-sqldeveloper, I assume you are using MySQL. If you are a great C# guide can be found here. I used this and it really helped in getting me started with MySQL & C#.

c# Service to copy data between two sql servers

I have two sql servers installed on my computer (SQL2008 EXPRESS) and also SQL2008 that comes with the specific software that we are using.
I need to make a service that runs all the time and at a specific time updates the non existing records in the SQL2008 EXPRESS from SQL2008.. can you suggest a way of doing this?
Currently the best thing I got is making a local copy in excel file, but that will result 365 excel files per year which I dont think is a good idea :)
p.s. sorry if my english is bad :)
You don't have to hand-craft your own software for that. There are 3rd party tools like OpenDbDiff or RedGate dbdiff to do that. These tools generate the differential sql that you can apply on your target database.
I'm confused when you mention Excel. What would Excel have anything to do with moving data from one SQL database to another?
The short answer is, if you need a C# service, then write a C# service that copies the data directly from one database to the other. The problem that you are trying to solve is not very clear.
Having said all that, and with my limited understanding of the problem, it sounds like what you need is a SQL job that is scheduled to run once a day that copies the data from one server to the other. Since it sounds like they are on separate instances, you'll just need to set up a linked server on either the source or destination database and either push or pull the data into the correct table(s).
EDIT:
Ok, so if a windows service is a requirement, that is perfectly acceptable. But, like I mentioned, you should forget about Excel. You wouldn't want to go from SQL->Excel->SQL if you have no other reason for the data to exist in Excel.
Here is some information on creating a windows service:
Easiest language for creating a Windows service
Here is a simple tutorial on accessing SQL in C#: http://www.codeproject.com/Articles/4416/Beginners-guide-to-accessing-SQL-Server-through-C
If you want a more formal solution (read: data access layer), I'd point you toward Entity Framework. The complexity of the project will probably be the driving factor on whether you just want to do SQL statements in your code vs. going with a full blown DAL.

Database Deployment Practices

I have deployed plenty of software to my clients. Mostly are Window Forms applications.
Here is my current practice.
Manually install SQLExpress and SQL Management Studio to each client PC.
Then use ClickOne to install the code from the server.
When there is a changes in code, I will use ClickOne to deploy -(NO PROBLEM with this step)
But when there is a change in a database column, what do I do?
I have even tried writing a database update script. Each time the program starts, it will read through the .sql update file and run them if the database exists. This solves the problem of updating the database columns, but it does not help in my DEBUGGING work when my customer complain there is a wrong data. At that point, I have to personally go to their site to check it out.
I find it difficult to have the database installed on the client PC as it make my debugging work very very difficult. I am thinking about moving my client database to a host on an Online server. But that then comes with these constraints:
What if the internet is down?
What if my customer has no internet?
Could you help to advise me? Is this a common problem faced by developer? What is the common practice out there? Does Window Azure or SQL CE help?
Depending on the data I would recommend using SQL CE.
If the data isn't too much, speed is not the primary goal (CE is slower than Express) and you don't need DB-Features not supported by CE (e.g. stored procedures) it is the better choice IMHO, because:
The client does not need to install a full SQL server (easier installation/deployment)
You do not have problems with multiple SQLExpress instances
Your SW doesn't need to worry if there even is a SQL instance
Less resources used on the client side
Additionally the clients could send you their SQL CE DB-File for inspection and you do not need to go to their site.
It is also relativly easy to implement an off site sync with SQL CE and MS Sync FW.
Installing one database per client PC can be tricky. I think you have a decent handle on how to deal with the issue currently. It seems like the real issue you are currently facing is debugging. To deal with this, there are a couple ways you could go:
Have the customer upload their copy of the database back to you. This would provide you with the data they have and you could use it with a debug copy of your code to identify the issues. The downside is that if the database is large it might be an issue transferring it.
Remote onto the customer's machine. Observe the system remotely using something like CoPilot. That way you could see what is happening in its natural environment.
There are probably other ways, but these are a couple of good ones. As for using an online database, this is an option but it brings its own set of issues with it. You mentioned a couple. As for Azure, that is cloud-based (online) so the same issues will apply. SQL CE won't help you any more than your current installation does.
Bottom line is that I would recommend you look into the ways to fix your one issue (as listed above) instead of creating a whole new set of issues by moving to an Internet-based solution. I would only recommend moving to the Internet if it was addressing a larger business need (for example, mobility). Doing the same thing you have been doing only online will probably just make life harder.
To recap the comments below since they are so pertinent to the issue, if you are choosing between file-based databases that don't need to be physically installed on the machine, your best choices are probably between SQLite and SQL CE. Microsoft supports SQL CE better but it is a larger package and has less features than the trim SQLite. Here is a good discussion on the differences:
https://stackoverflow.com/questions/2278104/sql-ce-sqlite-what-are-the-differences-between-them
However, the issue gets more complicated when you start looking at linq2sql since that is designed for SQL server. Microsoft does not support SQL CE with linq2sql out of the box, although there is a work-around that will get it to work:
http://pietschsoft.com/post/2009/01/Using-LINQ-to-SQL-with-SQL-Server-Compact-Edition.aspx
SQLite is not supported at all with linq2sql but there is a way to use linq to talk with SQLite:
LINQ with SQLite (linqtosql)
This library also supports other common databases including MySQL and Firebird.
You could use the SQLCMD utility to execute the change script, as mentioned in this related question

How to develop a web application compatible with multiple database management systems

How do you design and manage the development of a web application that should be compatible with multiple database management system such as Oracle and MS SQL Server?
If you can't use ORM like NHibernate or EF, how do you maintain database schemas during the development?
My approach now is to have a development database on SQL Server and to port it to Oracle (with a tool) just before releasing a test patch, to test the software on both rdbms. (The tool also generates a file used by the application to upgrade the database)
Is it a good approach? What about a database project of Visual Studio, could it be a better way to keep my db schema?
EDIT:
This question is not about designing the architecture of the application (I have already an abstract data access layer), but how to maintain database schemas for different kinds of rdbms during the development.
I think the key to this is to make sure that you stick to standard SQL syntax. MS SQL Server ships with Transact SQL (T-SQL) which is a super-set of ISO standard SQL, meaning that it has extra syntax which is not officially part of standard SQL.
SQLZoo is a good site that allows you to compare the syntax support of different databases. You will find that most of the syntax that you use from day to day will be the same between most DBs, but there are a few quirks out there. The best way to find them is to check each of your queries in each environment and then check them into source control.
Your idea to use a database project is a good one. It will allow you to deploy your changes to multiple databases quickly and test them automatically.
Model-driven architecture (MDA): use a generic Database modelling tool to design your database schema. You define the tables/relationships/primary keys/etc. in a generic fashion and then have the designer generate the necessary SQL script (most support output to a variety of databases). As you change the DB model, the tool will generate the necessary SQL code to update the database, or generate it from scratch. The tools also assist in generating documentation and assisting with database versioning, amongst many other things...
I use Context Database Designer and am exceptionally happy with the tool and price. Enterprise Architect also looks like an excellent tool, with the ability generate and reverse-engineer code.
Realistically the only way to handle this is to decouple your database access from you core application so that you can customize the access code for each database. In other words, exactly what Nhibernate and EF do. If you cannot use one of these tools you will still effective end up writing one any way. Which can be fun and interesting, but will also take up a large amount of time. So I'd be asking some serious questions about why you cannot use an ORM.

Categories

Resources