Insert new column and lost data in SQL server - sql-server

To add a new column to the table I double click on the table's name in the Server Explorer in Visual Studio 2010 and then right click to insert a new column. But the problem is that the new column is gone after I have run my aplication with a connection with the database.
All new data added to the database is gone after I shut down Visual Studio. But the data is in the database while I use the application, because I can load and see the new data I just added. The only data that are left are the data I added while I created the database and table in Visual Studio.
I'm using a mdf file. I have checked if the mdf file is in Bin/Debug. One thing that is strange is that there a two .mdf databases in the Server Explorer .mdf and .mdf1. It's the last one I have been trying to alter.
What could be wrong? A helping hand is appreciated! I need to hand in this task as soon as possible to my teacher. Thanks!

Try using T-sql:
Alter table table1 add col1 datatype.
Then try to insert data into it:
INSERT INTO table1(col1,col2...)
VALUES(v1,v2...)
Then you try to test.

Related

Fix LocalDB database structure after converstion from DateTime to int

I decided to use int instead of DateTime at this stage. I created a migration with add-migration, but that failed and said I have to run CONVERT command manually. I don't know SQL Server, so I went to the Visual Studio Server Explorer and used the Table design tool to change the values to int and ran Update. It succeeded, however, when I try to save something to my database it throws an error:
System.Data.SqlClient.SqlException: 'Cannot drop database "AppDbContext" because it is currently in use.'
I deleted manually the database files, located in my App_Data folder and rebuilt my app, but same error occurs. When I check the table structure with the design tool, it reflects my changes - the desired column is now int instead of DateTime.
This is the code that accesses the database:
db.Contests.Add(contest);
Contests is indeed the table I changed, but the database structure seems alright. I don't understand why it attempts to drop the database. How can I fix it?
Summary
Always work at Database level when modifying tables - I installed and used SQL Server Managment Studio and changed changed the tables with it successfully.
Error
As per my Cannot drop Database error, it happened, because my DbInitiallizer class was set to drop and re-recreate the database each time the model is changed. I removed that setting and instead configured it to create the database only if it does not exist. Afterwards all I needed to do was run the migration, to notify EF that all the table is now modified to reflect my models and it worked.
Simple steps to change table column property:
Make the desired model changes.
Use SQL Server Management Studio or similar database-level tool to modify the table column
Run add-migration <Name> and update-database in Package manager console tool in Visual studio
Done :)

Re-linking Tables in Access Database

First of all - my VB skills are almost non-existent so any suggestion/ideas should be a little more elaborate if possible. Here is the problem I am facing -
We have linked database tables and queries in Ms Access 2010. Now a copy of the database has been created on a new SQL server. So I want to re-link the tables so that access points to the tables on the new SQL server. Right now, all the tables are corresponding to the database on the old server. Here is what I have tried -
Open XYD_Outreach_Dev.accdb on the network (this is the dev version of access that we use)
Form a new ODBC connection which creates a new_sql_server.dsn file corresponding to the new SQL server (2012)
Go to External Data -> ODBC Database -> Link to the data source by creating......
Link to a table say - tblAbriContacts
This creates a new linked table dbotblAbriContacts
I rename it to tblAbriContacts at which point Access asks me -> table already exists. Do you want to replace it? I click yes and the table gets replaced
I hit the save button, close the application and restart it. The tblAbriContacts is pointing to the old database again
What could be the issue? Please note that I have to do this for all the database, lookup and junction tables.
Do I have to change some connection string which the access points to as soon as it is launched?
If I try the Linked table manager, nothing happens, it says "All selected tables were successfully refreshed". But nothing happens. I guess that's because the tables haven't been moved from the old database. A new copy of everything has been created on the new server.
Please help me out with this. My work is stuck because of this reason.
Can you please check if there is a module or other vba file created and file's on_load event has some code which to assign the connection string for all objects (tables and SPs) and refreshes it every time you restart the application.
If you see the connection string there, you might need to replace it with the new one.

difference between .dbo and .mdf database

I am really new to database and I am using visual studio 2010. From what I know, there are two ways of creating a database. The first is to right clicked on the project and select Add->New Item and then in the Add New Item dialog I select the Service-based Database which creates a mdf file that lies locally in my project.
Alternatively, I can also create a database in the following way. Right click on the DataConnection in Server Explorer and select Create New SQL Server Database. The created database is shown in server explorer as homepc\sqlexpress.myCreatedDatabase.dbo.
So my question is what is the difference between this two databases (mdf and dbo) and will there be any differences that might occur after I release my project, install and run it on other pcs?
.DBO is the database owner while
.MDF is the manifest data file which is the actual database file.
The primary data file contains the startup information for the database and points to the other files in the database. User data and objects can be stored in this file or in secondary data files. Every database has one primary data file. The recommended file name extension for primary data files is .mdf.(see msdn)
for more info see the forum here DBO or MDF whats the diffrence?

adding a new column in SQL SERVER but it is not showing up in access

access is the front end and sql server 2008 is the backend
i am opening the specific table in access. i have no problem editing data in this table using sql server and then displaying the changes in access; however, when i add a new field in sql server, the changes are not reflected in access.
i am opening the table as a datasheet and it is not showing the new field that i added in access. ive opened and closed the file and still doesn't work
anyone know what's going on here?
You might need to refresh the SQL Server table in Access using Linked Table Manager.
I cannot add comment but I like to add...
since it irritates me.
It is the same story not only in MS Access, it is the same in SSMS (MS SQL Server Management Studio, even from the latest MS SQL Server 2008 R2) with its own "native" mdf databases and tables from it.
If to change the content of a table through another window / tab or instance of SSMS (by TSQL, or by interactive editing) then the content shown in already opened for interactive editing table is not updated, though it is updated by non-documented Ctrl+R.
And it is not available in GUI of SSMS (no menu entry, no button, etc.)!!!
Any browser/webapp can be easily configured to update the content but not MS desktop IDE GUI!!!
But if to ALTER TABLE, for ex., to add a column, then already opened tab with table (SSMS) cannot reflect the changes (cannot show altered table, for ex., with added column) even by pressing Ctrl+R.
It is necessary to close tab (window) with table and reopen it
(right-clicking on table in SSMS ObjectExplorer --> Edit tio 200 rows)!!!
I remeber I opened a bug in Microsoft Connect feedback on it and it was closed as this was a feature "by design"!
Still IMHO it is a bug and requires brute force (/ugly GUI actions) to bypass it
This SO Q&A seems to cover similar territory.

How can I use a SQL Scripts in a Database Project with the System.Data.SQLite data provider?

I've got a project where I'm attempting to use SQLite via System.Data.SQLite. In my attempts to keep the database under version-control, I went ahead and created a Database Project in my VS2008. Sounds fine, right?
I created my first table create script and tried to run it using right-click->Run on the script and I get this error message:
This operation is not supported for the provider or data source you are using.
Does anyone know if there's an automatic way to use scripts that are part of database project against SQLite databases referenced by the databases, using the provider supplied by the System.Data.SQLite install?
I've tried every variation I can think of in an attempt to get the script to run using the default Run or Run On... commands. Here's the script in it's most verbose and probably incorrect form:
USE Characters
GO
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'U' AND name = 'Skills')
BEGIN
DROP Table Skills
END
GO
CREATE TABLE Skills
(
SkillID INTEGER PRIMARY KEY AUTOINCREMENT,
SkillName TEXT,
Description TEXT
)
GO
Please note, this is my first attempt at using a Database, and also the first time I've ever touched SQLite. In my attempts to get it to run, I've stripped any and everything out except for the CREATE TABLE command.
UPDATE: Ok, so as Robert Harvey points out below, this looks like an SQL Server stored procedure. I went into the Server Explorer and used my connection (from the Database project) to get do what he suggested regarding creating a table. I can generate SQL from to create the table and it comes out like thus:
CREATE TABLE [Skills] (
[SkillID] integer PRIMARY KEY NOT NULL,
[SkillName] text NOT NULL,
[Description] text NOT NULL
);
I can easily copy this and add it to the project (or add it to another project that handles the rest of my data-access), but is there anyway to automate this on build? I suppose, since SQLite is a single-file in this case that I could also keep the built database under version-control as well.
Thoughts? Best practices for this instance?
UPDATE: I'm thinking that, since I plan on using Fluent NHibernate, I may just use it's auto-persistence model to keep my database up-to-snuff and effectively in source control. Thoughts? Pitfalls? I think I'll have to keep initial population inserts in source-control separately, but it should work.
I built my database using an SQLite SQL script and then fed that into the sqlite3.exe console program like this.
c:\sqlite3.exe mydatabase.db < FileContainingSQLiteSQLCommands
John
Well, your script looks like a SQL Server stored procedure. SQLite most likely doesn't support this, because
It doesn't support stored procedures, and
It doesn't understand SQL Server T-SQL
SQL is actually a pseudo-standard. It differs between vendors and sometimes even between different versions of a product within the same vendor.
That said, I don't see any reason why you can't run any (SQLite compatible) SQL statement against the SQLite database by opening up connection and command objects, just like you would with SQL Server.
Since, however, you are new to databases and SQLite, here is how you should start. I assume you already have SQLite installed
Create a new Windows Application in Visual Studio 2008. The database application will be of no use to you.
Open the Server Explorer by pulling down the View menu and selecting Server Explorer.
Create a new connection by right-clicking on the Data Connections node in Server Explorer and clicking on Add New Connection...
Click the Change button
Select the SQLite provider
Give your database a file name.
Click OK.
A new Data Connection should appear in the Server Explorer. You can create your first table by right-clicking on the Tables node and selecting Add New Table.

Resources